在C++中实现JSON序列化和反序列化,一个常用的第三方库是RapidJSON,它是一个快速的JSON解析器及生成器,适用于效率敏感的应用场景。下面我将给出使用RapidJSON进行JSON序列化和反序列化的基础示例。
### JSON序列化(对象转换为JSON字符串)
假设你有一个简单的结构体或者类,想要将其序列化为JSON字符串:
```cpp
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
// 假设这是你要序列化的类或结构体
struct Person {
std::string name;
int age;
};
void SerializePerson(const Person& person, std::string& jsonString) {
rapidjson::Document d;
d.SetObject();
// 添加成员到JSON文档
d.AddMember("name", rapidjson::Value().SetString(person.name.c_str(), d.GetAllocator()), d.GetAllocator());
d.AddMember("age", rapidjson::Value().SetInt(person.age), d.GetAllocator());
// 将文档转换为字符串
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
d.Accept(writer);
jsonString = buffer.GetString();
}
```
### JSON反序列化(JSON字符串转换为对象)
现在,如果你有一个JSON字符串,想要将其反序列化为之前定义的`Person`结构体:
```cpp
void DeserializePerson(const std::string& jsonString, Person& person) {
rapidjson::Document d;
d.Parse(jsonString.c_str());
if (d.HasMember("name") && d["name"].IsString()) {
person.name = d["name"].GetString();
}
if (d.HasMember("age") && d["age"].IsInt()) {
person.age = d["age"].GetInt();
}
}
```
### 使用示例
```cpp
int main() {
Person p = {"Alice", 30};
std::string jsonString;
SerializePerson(p, jsonString);
std::cout << "Serialized JSON: " << jsonString << std::endl;
Person pDeserialized;
DeserializePerson(jsonString, pDeserialized);
std::cout << "Deserialized Person: Name=" << pDeserialized.name << ", Age=" << pDeserialized.age << std::endl;
return 0;
}
```
请注意,以上示例假定你已经正确安装并配置了RapidJSON库。此外,对于更复杂的对象结构,你可能需要实现更复杂的逻辑来遍历和设置JSON文档的成员。如果C++标准库未来支持反射机制,这一步骤可能会简化很多。