【问题标题】:Reading Json file's root in c++ with jsoncpp使用 jsoncpp 在 C++ 中读取 Json 文件的根目录
【发布时间】:2018-06-14 00:57:54
【问题描述】:

文件:

{  
   "somestring":{  
      "a":1,
      "b":7,
      "c":17,
      "d":137,
      "e":"Republic"
   },
}

如何通过 jsoncpp 读取 somestring 值?

【问题讨论】:

  • 欢迎来到 Stack Overflow! StackOverflow 不是免费的编码服务。所以希望你try to solve your own problem first。请更新您的问题以在minimal reproducible example 中显示您已经尝试过的内容。如需更多信息,请参阅How to Ask,并拨打tour :)
  • 基本上我想得到键的值是“somestring”
  • 那你有什么问题?您尝试执行此操作的代码在哪里?
  • 您可以使用getMemberNames() 方法获取包含所有属性名称的向量。 "somestring" 将是该向量的第一个元素。

标签: c++ json jsoncpp


【解决方案1】:

使用getMemberNames() 方法。

Json::Value root;
root << jsonString;
Json::Value::Members propNames = root.getMemberNames();
std::string firstProp = propNames[0];
std::cout << firstProp << '\n'; // should print somestring

如果您想查看所有属性,可以使用迭代器循环遍历它:

for (auto it: propNames) {
    cout << "Property: " << *it << " Value: " << root[*it].asString() << "\n";
}

这个简单的循环仅适用于值为字符串的属性。如果您想处理嵌套对象,就像在您的示例中一样,您需要使其递归,我将其作为练习留给读者。

【讨论】:

  • 谢谢,它有效。我怎么知道我的文件中有多少成员?就像我想使用 for 循环打印文件中的所有名称一样。
  • 它有一个标准的迭代器,你可以循环遍历所有的成员。
  • 类似于循环遍历std::vectorstd::map
  • 你能用一些代码解释一下吗?因为我只是学习了一点 Jsoncpp,我真的不知道它是如何工作的。而且我还没有学习矢量,因为我是 C++ 初学者。
  • 我添加了一些简单的代码,但您需要对其进行详细说明以处理您的实际对象。 SO 不是编程学校,你需要自己学习它是如何工作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多