在C++中,可以使用第三方库进行 JSON 的序列化和反序列化。一个常用的 JSON 库是 nlohmann/json
,它是一个现代的、轻量级的 JSON 库,使用单个头文件即可完成。以下是一个简单的示例,演示如何使用 nlohmann/json
将对象序列化为 JSON 字符串并保存到文件,以及如何从 JSON 字符串中反序列化出对象。
首先,确保你已经将 nlohmann/json
头文件拷贝到你的项目中。你可以从 GitHub 上获取它:
# Clone nlohmann/json repository
git clone https://github.com/nlohmann/json.git
# Copy single header file into your project
cp json/single_include/nlohmann/json.hpp /path/to/your/project
接下来,是一个包含详细注释的源代码示例:
#include <iostream>
#include <fstream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
// 定义一个示例类
class Person {
public:
std::string name;
int age;
// 将对象序列化为 JSON
void to_json(json& j) const {
j = json{{"name", name}, {"age", age}};
}
// 从 JSON 反序列化为对象
void from_json(const json& j) {
j.at("name").get_to(name);
j.at("age").get_to(age);
}
};
int main() {
// 创建一个 Person 对象
Person person;
person.name = "John Doe";
person.age = 30;
// 将对象序列化为 JSON 字符串
json personJson;
person.to_json(personJson);
std::string jsonString = personJson.dump();
// 将 JSON 字符串保存到文件
std::ofstream file("person.json");
file << jsonString;
file.close();
std::cout << "Person 对象已序列化并保存到 person.json 文件中。\n";
// 从文件中读取 JSON 字符串
std::ifstream readFile("person.json");
json loadedJson;
readFile >> loadedJson;
// 将 JSON 字符串反序列化为对象
Person loadedPerson;
loadedPerson.from_json(loadedJson);
std::cout << "从 person.json 文件中加载并反序列化的 Person 对象:\n";
std::cout << "Name: " << loadedPerson.name << "\n";
std::cout << "Age: " << loadedPerson.age << "\n";
return 0;
}
在这个示例中:
Person
类包含了 to_json
和 from_json
方法,分别用于将对象序列化成 JSON 和从 JSON 反序列化为对象。main
函数中,我们创建了一个 Person
对象,将其序列化成 JSON 字符串并保存到文件中。Person
对象。Person
对象的内容。请确保在编译时链接 nlohmann/json
头文件,并确保你的编译器能够找到该头文件。这个示例提供了一个简单的 JSON 序列化和反序列化的过程,你可以根据实际需求扩展和修改。