C ++,使用nlohmann :: json进行JSON数组解析

时间:2018-11-15 17:11:21

标签: c++ json nlohmann-json

在导入到我的c ++程序的json文件中,其结构如下:

{
 "a":"1",
 "ec":[
       {
        "a":"0x00",
        "s":[
             {"a":"0xA0"},
             {"a":"0xA1"},
            ],
        "b":"v1"
       },
       {
        "a":"0x01",
        "s":[
             {"a":"0xB0"},
             {"a":"0xB1"},
            ],
        "b":"v2"
       }
      ]
}

我想遍历"ec"数组并获取所有"a"的值,并且每个"a"的{​​{1}}数组都相同

s

首先,我得到vector<string> ec_a; // should contain {"0x00","0x01"} vector<string> a1_s; // should contain {"0xA0", "0xA1"} vector<string> a2_s; // should contain {"0xB0","0xB1"} 的大小,但从docs开始,我知道应该对其余部分使用迭代器

ec

但获得此异常int n=j["ec"].size() // n = 2 for(auto it=j["ec"].begin();it!=j["ec"].end();++it){ if(it.key() == "a") ec_a.push_back(it.value()); } 我认为nlohmann::detail::invalid_iterator at memory location是不正确的。

我应该怎么做,谢谢。

1 个答案:

答案 0 :(得分:0)

it是复合类型的迭代器。复合类型本身没有“键”。

您想要实现的目标比您想象的要容易得多。您可以尝试以下方法:

std::vector<std::string> ec_a;
for (auto& elem : j["ec"])
    ec_a.push_back(elem["a"]);

(live demo)