如何使用RapidJson解析C++中的对象数组?
RapidJson简介
RapidJson是一个快速、轻量、易于使用的C++ JSON解析/生成器。它支持SAX和DOM解析,具有高效率和低内存消耗等特点。
解析对象数组
下面以解析对象数组为例,介绍如何使用RapidJson。
假设我们有一个json文件example.json,内容如下:
[
{"name":"John","age":20},
{"name":"Jane","age":25},
{"name":"Tom","age":30}
]
我们想要将其解析成一个对象数组,每个对象包含name和age两个属性。
首先,我们需要引入RapidJson库和相关头文件:
#include <rapidjson/document.h>
#include <rapidjson/writer.h>
#include <rapidjson/stringbuffer.h>
#include <fstream>
#include <iostream>
using namespace rapidjson;
using namespace std;
然后读取文件内容,并将其转换为一个字符串:
ifstream ifs("example.json");
string content((istreambuf_iterator<char>(ifs)),(istreambuf_iterator<char>()));
接下来,我们需要定义一个Document对象,并使用该对象解析字符串:
Document doc;
doc.Parse(content.c_str());
最后,我们遍历数组,获取每个对象的name和age属性:
const Value& arr = doc;
if (arr.IsArray()) {
for (SizeType i = 0; i < arr.Size(); i++) {
const Value& obj = arr[i];
if (obj.IsObject() && obj.HasMember("name") && obj.HasMember("age")) {
const Value& name = obj["name"];
const Value& age = obj["age"];
cout << "name: " << name.GetString() << ", age: " << age.GetInt() << endl;
}
}
}
完整代码如下:
#include <rapidjson/document.h>
#include <rapidjson/writer.h>
#include <rapidjson/stringbuffer.h>
#include <fstream>
#include <iostream>
using namespace rapidjson;
using namespace std;
int main() {
ifstream ifs("example.json");
string content((istreambuf_iterator<char>(ifs)),(istreambuf_iterator<char>()));
Document doc;
doc.Parse(content.c_str());
const Value& arr = doc;
if (arr.IsArray()) {
for (SizeType i = 0; i < arr.Size(); i++) {
const Value& obj = arr[i];
if (obj.IsObject() && obj.HasMember("name") && obj.HasMember("age")) {
const Value& name = obj["name"];
const Value& age = obj["age"];
cout << "name: " << name.GetString() << ", age: " << age.GetInt() << endl;
}
}
}
return 0;
}
输出结果如下:
name: John, age: 20
name: Jane, age: 25
name: Tom, age: 30
结论
使用RapidJson可以轻松解析JSON数据,具有高效率和低内存消耗等特点。在解析对象数组时,只需遍历数组,获取每个对象的属性即可。