这是我的JSON对象:
{
"resources":[
{
"Foo":0,
"Bar":"",
"Fiz":1
},
{
"Foo":2,
"Bar":"",
"Fiz":3
}
]
}
上述JSON数组resources
被正确检测为array
。我想迭代数组中的每个对象,并将key:value
对添加到map
。
它确实正确地检测了对象的数量(此处为:2)。 但是如何迭代对象成员呢?有一个断言,数组中的每个元素都不是对象。我不明白,为什么!
这是我的代码:
if ( jsonvalue->IsArray() ){ // that jsonvalue is my "resources" array
for (rapidjson::SizeType i = 0; i < jsonvalue->Size(); i++){
const rapidjson::Value& c = jsonvalue[i];
// Is no object! assertion triggers in next call.
for (rapidjson::Value::ConstMemberIterator iter = c.MemberBegin(); iter != c.MemberEnd(); ++iter){
printf("%s\t", iter->name.GetString());
printf("%s\t", iter->value.GetString());
}
}
}
答案 0 :(得分:0)
您将所有值视为string
,但在您的JSON中,键值为Int
类型。因此,在打印之前,您需要首先检查每个value
的类型。
以下是一个例子:
printf( "%s\t", iter->name.GetString() );
if ( iter->value.IsInt() )
{
printf( "%d\t", iter->value.GetInt() );
}
else if ( iter->value.IsString() )
{
printf( "%s\t", iter->value.GetString() );
}
我想知道为什么你没有使用C ++ 11基于范围的for循环进行迭代。 RapidJSON支持这一点。请参阅Example。
您的代码将更具可读性和紧凑性。