C++ nonlohmann json 读取子对象
C++ nonlohmann json read child object
我实际上正在编写一个小程序,我需要读取一个 json 文件。
我正在使用 C++ 和 nlohmann json 库。
我当前的代码
int main(int argc, const char** argv){
ifstream ifs("Myjson.json");
json j = json::parse(ifs);
cout << "Front image path : "<< j["front"]["imagePath"] << "\n";
cout << "Back image path : " << j["back"]["imagePath"] << "\n";
system("PAUSE");
return 0;
}
MyJson.json
{
"Side": [
{
"camera": "22344506",
"width": 19860,
"nbParts": 662,
"wParts": 30,
"height": 1600,
"imagePath": "./Tchek_buffer/22344506.png"
},
{
"camera": "22344509",
"width": 5296,
"nbParts": 662,
"wParts": 8,
"height": 1600,
"imagePath": "./Tchek_buffer/22344509.png"
},
],
"front": {
"camera": "22344513",
"image": null,
"width": 1200,
"height": 1600,
"imagePath": "./Tchek_buffer/22344513.png"
},
"back": {
"camera": "22344507",
"image": null,
"width": 1600,
"height": 1200,
"imagePath": "./Tchek_buffer/22344507.png"
},
}
我可以轻松读取和显示 "back" 和 "front" 对象,但我无法读取扫描仪对象。
我想获得所有 "scanner" 对象的 "imagePath"
我试过
cout << "scanner image path : " << j["scanner"]["imagePath"] << "\n";
cout << "scanner image path : " << j["scanner[1]"]["imagePath"] << "\n";
cout << "scanner image path : " << j["scanner"[1]]["imagePath"] << "\n";
我只得到"null"结果
如果有人可以帮助我并向我解释如何让它发挥作用。
我想 "Side"
和 "scanner"
在你的问题中是等价的。您可能在标签之间做了不匹配。
我不知道这个库,但我想应该是这样的:
cout << "scanner image path 1 : " << j["scanner"][0]["imagePath"] << "\n";
cout << "scanner image path 2 : " << j["scanner"][1]["imagePath"] << "\n";
您可以从文档中找到示例 here。
假设 scanner
实际上是 Side
在 json.
您的试验执行了以下操作:
- 访问列表"imagePath"属性
- 访问列表"scanner[1]"属性
- 访问列表的 "c"(第二个字符)属性。
所以肮脏的方法是:
cout << "scanner image path : " << j["Side"][0]["imagePath"] << "\n";
cout << "scanner image path : " << j["Side"][1]["imagePath"] << "\n";
正确的应该是:
for (auto& element : j["Side"])
cout << "scanner image path : " << element["imagePath"] << "\n";
我实际上正在编写一个小程序,我需要读取一个 json 文件。 我正在使用 C++ 和 nlohmann json 库。
我当前的代码
int main(int argc, const char** argv){
ifstream ifs("Myjson.json");
json j = json::parse(ifs);
cout << "Front image path : "<< j["front"]["imagePath"] << "\n";
cout << "Back image path : " << j["back"]["imagePath"] << "\n";
system("PAUSE");
return 0;
}
MyJson.json
{
"Side": [
{
"camera": "22344506",
"width": 19860,
"nbParts": 662,
"wParts": 30,
"height": 1600,
"imagePath": "./Tchek_buffer/22344506.png"
},
{
"camera": "22344509",
"width": 5296,
"nbParts": 662,
"wParts": 8,
"height": 1600,
"imagePath": "./Tchek_buffer/22344509.png"
},
],
"front": {
"camera": "22344513",
"image": null,
"width": 1200,
"height": 1600,
"imagePath": "./Tchek_buffer/22344513.png"
},
"back": {
"camera": "22344507",
"image": null,
"width": 1600,
"height": 1200,
"imagePath": "./Tchek_buffer/22344507.png"
},
}
我可以轻松读取和显示 "back" 和 "front" 对象,但我无法读取扫描仪对象。 我想获得所有 "scanner" 对象的 "imagePath"
我试过
cout << "scanner image path : " << j["scanner"]["imagePath"] << "\n";
cout << "scanner image path : " << j["scanner[1]"]["imagePath"] << "\n";
cout << "scanner image path : " << j["scanner"[1]]["imagePath"] << "\n";
我只得到"null"结果
如果有人可以帮助我并向我解释如何让它发挥作用。
我想 "Side"
和 "scanner"
在你的问题中是等价的。您可能在标签之间做了不匹配。
我不知道这个库,但我想应该是这样的:
cout << "scanner image path 1 : " << j["scanner"][0]["imagePath"] << "\n";
cout << "scanner image path 2 : " << j["scanner"][1]["imagePath"] << "\n";
您可以从文档中找到示例 here。
假设 scanner
实际上是 Side
在 json.
您的试验执行了以下操作:
- 访问列表"imagePath"属性
- 访问列表"scanner[1]"属性
- 访问列表的 "c"(第二个字符)属性。
所以肮脏的方法是:
cout << "scanner image path : " << j["Side"][0]["imagePath"] << "\n";
cout << "scanner image path : " << j["Side"][1]["imagePath"] << "\n";
正确的应该是:
for (auto& element : j["Side"])
cout << "scanner image path : " << element["imagePath"] << "\n";