我的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()
正在工作
我不知道你怎么能从你的代码中得到cannot convert
错误,但我确实认为我看到了问题。
Json::ValueIterator
是一个迭代器;换句话说,类似于指针,需要取消引用它以访问它指向的值。
itr.asString()
尝试访问迭代器的asString
方法,并且迭代器没有asString
方法。*itr.asString()
尝试访问迭代器的asString
方法然后取消引用结果(因为操作的顺序; .
具有比*
更高的优先级),并且迭代器没有asString
方法。(*itr).asString()
(使用括号来澄清优先权)或itr->asString()
(使用->
运算符,首选方法)应该有效。在c ++ 11中,它现在更简单:
for (auto itr : json["name"]) {
string name = itr.asString();
// ...
}