JSONcpp遍历对象中的列表

时间:2014-11-13 16:13:41

标签: c++ json

我的json对象中有一个列表,我想迭代列表的元素 我看到了以下帖子Iterating through objects in JsonCpp,但这对我不起作用

我的json对象:

{
         "name": ["str1",str2" ... ]
}

我拥有且无法使用的代码

Json::Value names= (*json)["name"];
for( Json::ValueIterator itr = names.begin() ; itr != names.end() ; itr++ ) {
    string name =  *itr.asString();}

我收到以下错误

cannot convert from 'Json::Value' to 'std::basic_string<_Elem,_Traits,_Ax>

我确信元素是字符串,因为调用string name = names= (*json)["name"][0].asString()正在工作

2 个答案:

答案 0 :(得分:8)

在c ++ 11中,它现在更简单了:

for (auto itr : json["name"]) {
    string name = itr.asString();
    // ...
}

答案 1 :(得分:7)

我不知道如何从代码中收到cannot convert错误,但我确实认为我发现了问题。

Json::ValueIterator迭代器;换句话说,类似于指针,需要取消引用它以访问它指向的值。

  • itr.asString()尝试访问迭代器的asString方法,而迭代器没有asString方法。
  • *itr.asString()尝试访问迭代器的asString方法,然后取消引用结果(因为操作顺序; .的优先级高于*),并且迭代器没有asString方法。
  • (*itr).asString()(使用括号澄清优先顺序)或itr->asString()(使用->运算符,首选方法)应该有效。