期待rapidjson documentation建议使用此代码查询数组:
for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr)
printf("%d ", itr->GetInt());
但是,我有一个数组数组,如:
[ [0,2], [1,2], [4, 5], ... ]
我希望有两个级别来处理它,如下所示:
for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr)
for (Value::ConstValueIterator itr2 = itr->GetArray().Begin(); itr2 != itr->GetArray().End(); ++itr2)
printf("%d ", itr2->GetInt());
但是,似乎itr
没有任何GetArray()
或等效方法返回一个获取第二个(内部)迭代器的对象。
注意:我找到了这个Q&A post,但它似乎基于gettinig a Value
表示内部数组。但是,我不知道如何从itr
迭代器中获取此值(例如itr->value
无效)。
答案 0 :(得分:2)
你可以用这种方式解析数组json数组:
#include <vector>
#include <rapidjson/document.h>
using namespace rapidjson;
int main(void)
{
std::vector<std::vector<int>> vec;
const char* json = "{ \"data\":[[0,1],[2,3]] }";
Document d;
d.Parse<0>(json);
Value& data = d["data"];
vec.resize(data.Size());
for (SizeType i = 0; i<data.Size(); i++)
{
const rapidjson::Value &data_vec = data[i];
for (SizeType j = 0; j < data_vec.Size(); j++)
vec[i].push_back(data_vec[j].GetInt());
}
return 0;
}