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

Ami*_*avi 7 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"
       }
      ]
}
Run Code Online (Sandbox Code Playgroud)

我想迭代"ec"数组并获取所有数组的值,"a"并且每个数组"a"的值都相同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"}
Run Code Online (Sandbox Code Playgroud)

首先我得到了大小,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());
}
Run Code Online (Sandbox Code Playgroud)

但得到这个例外nlohmann::detail::invalid_iterator at memory location 我认为这j["ec"].begin()是不正确的。

我该怎么做,谢谢。

L. *_* F. 8

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

你想要实现的目标比你想象的要容易得多。你可以试试这个:

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

(现场演示)