在导入到我的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
是不正确的。
我应该怎么做,谢谢。
答案 0 :(得分:0)
it
是复合类型的迭代器。复合类型本身没有“键”。
您想要实现的目标比您想象的要容易得多。您可以尝试以下方法:
std::vector<std::string> ec_a;
for (auto& elem : j["ec"])
ec_a.push_back(elem["a"]);