使用 rapidjson 读取子对象向量
Reading sub-object vector with rapidjson
这是我的 json:
{
"data": {
"text": "hey Whosebug",
"array_1": [
["hello", "world", 11, 14]
]
},
}
我已经设法像这样提取 text
属性:
代码:
document.Parse(request_body);
auto& data = document["data"];
std::string text = data["text"].GetString();
printf("text: %s\n", text.c_str());
输出:
text: hey Whosebug
现在我需要将 array_1
提取为 std::vector<std::vector<std::any>>
。
我想,要拥有这样的数据类型,我将不得不使用快速json 的类型遍历 data["array_1"]
来填充向量。
问题是,即使尝试复制我在互联网上看到的内容,我仍然无法读取 data["array_1"]
中的值。
代码:
auto& array_1 = data["array_1"];
static const char* kTypeNames[] = { "Null", "False", "True", "Object", "Array", "String", "Number" };
for (rapidjson::Value::ConstValueIterator itr = array_1.Begin(); itr != array_1.End(); ++itr){
printf("item\n");
for (rapidjson::Value::ConstValueIterator itr2 = itr->Begin(); itr2 != itr->End(); ++itr2){
printf("Type is %s\n", kTypeNames[itr->GetType()]);
}
}
输出:
item
Type is Array
Type is Array
Type is Array
Type is Array
但我需要:
item
Type is String
Type is String
Type is Number
Type is Number
编辑
我在错误的迭代器上调用了 GetType
..
感谢您的帮助
printf("Type is %s\n", kTypeNames[itr2->GetType()]);
没有
printf("Type is %s\n", kTypeNames[itr->GetType()]);
您正在重复打印 item
的类型,也就是 ["hello", "world", 11, 14]
,而不是 ["hello", "world", 11, 14]
的元素。
或者:
for (auto&& item : array_1.GetArray()) {
printf("item\n");
for (auto&& elem : item.GetArray()){
printf("Type is %s\n", kTypeNames[elem.GetType()]);
}
}
消除一些迭代噪音。 (需要 c++11 和 rapidJson v1.1.0)
这是我的 json:
{
"data": {
"text": "hey Whosebug",
"array_1": [
["hello", "world", 11, 14]
]
},
}
我已经设法像这样提取 text
属性:
代码:
document.Parse(request_body);
auto& data = document["data"];
std::string text = data["text"].GetString();
printf("text: %s\n", text.c_str());
输出:
text: hey Whosebug
现在我需要将 array_1
提取为 std::vector<std::vector<std::any>>
。
我想,要拥有这样的数据类型,我将不得不使用快速json 的类型遍历 data["array_1"]
来填充向量。
问题是,即使尝试复制我在互联网上看到的内容,我仍然无法读取 data["array_1"]
中的值。
代码:
auto& array_1 = data["array_1"];
static const char* kTypeNames[] = { "Null", "False", "True", "Object", "Array", "String", "Number" };
for (rapidjson::Value::ConstValueIterator itr = array_1.Begin(); itr != array_1.End(); ++itr){
printf("item\n");
for (rapidjson::Value::ConstValueIterator itr2 = itr->Begin(); itr2 != itr->End(); ++itr2){
printf("Type is %s\n", kTypeNames[itr->GetType()]);
}
}
输出:
item
Type is Array
Type is Array
Type is Array
Type is Array
但我需要:
item
Type is String
Type is String
Type is Number
Type is Number
编辑
我在错误的迭代器上调用了 GetType
..
感谢您的帮助
printf("Type is %s\n", kTypeNames[itr2->GetType()]);
没有
printf("Type is %s\n", kTypeNames[itr->GetType()]);
您正在重复打印 item
的类型,也就是 ["hello", "world", 11, 14]
,而不是 ["hello", "world", 11, 14]
的元素。
或者:
for (auto&& item : array_1.GetArray()) {
printf("item\n");
for (auto&& elem : item.GetArray()){
printf("Type is %s\n", kTypeNames[elem.GetType()]);
}
}
消除一些迭代噪音。 (需要 c++11 和 rapidJson v1.1.0)