【C++】一文搞懂JSON序列化和反序列(让你有一种相见恨晚的感觉!!)
#include <nlohmann/json.hpp>
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
// 使用nlohmann::json库进行JSON的序列化和反序列化
// 定义一个简单的User类
class User {
public:
std::string name;
int age;
// 构造函数
User(const std::string& name, int age) : name(name), age(age) {}
// 将User对象序列化为JSON
operator nlohmann::json() const {
return nlohmann::json{{"name", name}, {"age", age}};
}
// 从JSON反序列化为User对象
static User from_json(const nlohmann::json& j) {
return User(j.at("name").get<std::string>(), j.at("age").get<int>());
}
};
int main() {
// 创建User对象
User user1("Alice", 30);
User user2("Bob", 25);
// 序列化到JSON
nlohmann::json user1_json = user1;
nlohmann::json user2_json = user2;
// 将JSON对象转换为字符串
std::string user1_str = user1_json.dump();
std::string user2_str = user2_json.dump();
// 输出序列化后的JSON字符串
std::cout << "User1 JSON: " << user1_str << std::endl;
std::cout << "User2 JSON: " << user2_str << std::endl;
// 反序列化
User deserialized_user1 = User::from_json(user1_json);
User deserialized_user2 = User::from_json(user2_json);
// 输出反序列化后的User对象信息
std::cout << "Deserialized User1: " << deserialized_user1.name << ", " << deserialized_user1.age << std::endl;
std::cout << "Deserialized User2: " << deserialized_user2.name << ", " << deserialized_user2.age << std::endl;
return 0;
}
这段代码展示了如何使用nlohmann::json库来序列化和反序列化一个自定义的User类。它首先定义了一个User类,并为该类提供了到nlohmann::json的转换操作符以及一个从nlohmann::json转换回User对象的静态方法。然后,它创建了User对象,将它们序列化为JSON,序列化后的JSON被转换为字符串,并打印出来。最后,它从JSON字符串中反序列化User对象,并打印出反序列化后的对象信息。这个过程展示了JSON数据在C++对象和字符串之间转换的完整流程。
评论已关闭