请给我一个在c++中使用RapidJSON的完整类例子 需要可以解析json字符串和使用json类置对象和成员 然后获取json数据
时间: 2024-02-06 22:12:53 浏览: 51
好的,以下是一个使用 RapidJSON 库的完整例子,包括解析 JSON 字符串、使用 JSON 对象设置成员、获取 JSON 数据的过程。
```c++
#include <iostream>
#include <string>
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
using namespace std;
using namespace rapidjson;
int main()
{
// 解析 JSON 字符串
string json_str = "{\"name\": \"Tom\", \"age\": 20, \"is_student\": true, \"scores\": [85, 90, 95]}";
Document json_obj;
json_obj.Parse(json_str.c_str());
// 使用 JSON 对象设置成员
Value email_val;
email_val.SetString("tom@example.com", json_obj.GetAllocator());
json_obj.AddMember("email", email_val, json_obj.GetAllocator());
// 获取 JSON 数据
string name = json_obj["name"].GetString();
int age = json_obj["age"].GetInt();
bool is_student = json_obj["is_student"].GetBool();
const Value& scores = json_obj["scores"];
if (scores.IsArray()) {
cout << "Scores: ";
for (SizeType i = 0; i < scores.Size(); ++i) {
cout << scores[i].GetInt() << " ";
}
cout << endl;
}
cout << "Name: " << name << endl;
cout << "Age: " << age << endl;
cout << "Is student: " << boolalpha << is_student << endl;
cout << "Email: " << json_obj["email"].GetString() << endl;
// 将 JSON 对象序列化为字符串
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
json_obj.Accept(writer);
cout << "Serialized JSON: " << buffer.GetString() << endl;
return 0;
}
```
输出结果:
```
Scores: 85 90 95
Name: Tom
Age: 20
Is student: true
Email: tom@example.com
Serialized JSON: {"name":"Tom","age":20,"is_student":true,"scores":[85,90,95],"email":"tom@example.com"}
```
注意:在使用 RapidJSON 的过程中,需要注意内存管理和错误处理。RapidJSON 使用 C++11 的特性,因此需要使用支持 C++11 的编译器。