C ++ nonlohmann json читать дочерний объект

На самом деле я работаю над небольшой программой, и мне нужно прочитать файл 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"},
}

Я могу легко прочитать и отобразить «задний» и «передний» объекты, но не могу прочитать объект сканера.
я хочу получить «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";

я получаю только «нулевой» результат

если кто-то может помочь мне и объяснить мне, как я могу заставить его работать.

0

Решение

Если предположить, 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";
2

Другие решения

Я полагаю "Side" а также "scanner" эквивалентно в вашем вопросе. Вы, вероятно, сделали несоответствие между тегами.

Я не знаю эту библиотеку, но я полагаю, что-то вроде этого:

cout << "scanner image path 1 : " << j["scanner"][0]["imagePath"] << "\n";
cout << "scanner image path 2 : " << j["scanner"][1]["imagePath"] << "\n";

Вы можете найти пример из документации Вот.

0

По вопросам рекламы [email protected]