访问来自nlohmann json的元素

时间:2016-06-29 12:18:18

标签: c++ json

我的JSON文件类似于此

{
  "active" : false,
  "list1" : ["A", "B", "C"],
  "objList" : [
    {
     "key1" : "value1",
     "key2" : [ 0, 1 ]
    }
   ]
}

现在使用nlohmann json,我已经设法存储它,当我进行转储jsonRootNode.dump()时,内容被正确表示。

但是我找不到访问内容的方法。

我已尝试jsonRootNode["active"]jsonRootNode.get()并使用json::iterator,但仍无法弄清楚如何检索我的内容。

我正在尝试检索"active",来自"list1"的数组和来自"objList"的对象数组

3 个答案:

答案 0 :(得分:5)

以下link解释了访问JSON中元素的方法。如果链接超出范围,则代码为

#include <json.hpp>

 using namespace nlohmann;

 int main()
 {
     // create JSON object
     json object =
     {
         {"the good", "il buono"},
         {"the bad", "il cativo"},
         {"the ugly", "il brutto"}
     };

     // output element with key "the ugly"
     std::cout << object.at("the ugly") << '\n';

     // change element with key "the bad"
     object.at("the bad") = "il cattivo";

     // output changed array
     std::cout << object << '\n';

     // try to write at a nonexisting key
     try
     {
         object.at("the fast") = "il rapido";
     }
     catch (std::out_of_range& e)
     {
         std::cout << "out of range: " << e.what() << '\n';
     }
 }

答案 1 :(得分:3)

万一其他人仍在寻找答案。您可以使用与写入nlohmann::json对象相同的方法来访问内容。例如从中获取价值 问题中的json:

{
  "active" : false,
  "list1" : ["A", "B", "C"],
  "objList" : [
    {
      "key1" : "value1",
      "key2" : [ 0, 1 ]
    }
  ]
}

只需:

nlohmann::json jsonData = nlohmann::json::parse(your_json);
std::cout << jsonData["active"] << std::endl;    // returns boolean
std::cout << jsonData["list1"] << std::endl;     // returns array

如果"objList"只是一个对象,则可以通过以下方式检索其值:

std::cout << jsonData["objList"]["key1"] << std::endl;    // returns string
std::cout << jsonData["objList"]["key2"] << std::endl;    // returns array

但是由于"objList"是键/值对的列表,因此要使用其值,请使用:

for(auto &array : jsonData["objList"]) {
    std::cout << array["key1"] << std::endl;    // returns string
    std::cout << array["key2"] << std::endl;    // returns array
}

考虑到"objList"是大小为1的数组,循环仅运行一次。

希望它对某人有帮助

答案 2 :(得分:0)

我真的很喜欢在 C++ 中使用它:

for (auto& el : object["list1"].items())
{
  std::cout << el.value() << '\n';
}

它将遍历数组。