JSONcpp遍历对象中的列表

问题描述 投票:3回答:2

我的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()正在工作

c++ json
2个回答
6
投票

我不知道你怎么能从你的代码中得到cannot convert错误,但我确实认为我看到了问题。

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

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

8
投票

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

for (auto itr : json["name"]) {
    string name = itr.asString();
    // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.