Создание базы данных json с пользовательским вводом - PullRequest
0 голосов
/ 27 февраля 2019

Мне нужно создать мой массив .json, чтобы он выглядел так:

  {
  "airports": [{
          "address": "Horley, Gatwick RH6 0NP, UK",
          "city": "London",
          "shortVersion": "LGW"
      },
      {
          "address": "Marupe, LV-1053",
          "city": "Riga",
          "shortVersion": "RIX"
      }
  ]
}

Но сейчас он выглядит так:

{
  "airports": {
    "(LGW)": {
      "address": "Horley, Gatwick RH6 0NP, UK",
      "city": "London",
      "shortVersion": "(LGW)"
    },
    "(RIX)": {
      "address": "Marupe, LV-1053",
      "city": "Riga",
      "shortVersion": "(RIX)"
    }
  }
}

Код, который я имею для пользователяпрямо сейчас вводим следующее:

airports["airports"][inputShortVersion]["shortVersion"] = inputShortVersion;
airports["airports"][inputShortVersion]["city"] = inputCity;
airports["airports"][inputShortVersion]["address"] = inputAddress;

Я целый день искал, как это сделать, но самое близкое, что я получил, это где он создает вышеуказанный массив, но после ввода он перезаписывает последний аэропортданные.

Я использую библиотеку nlohmann json.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Очевидно, вы создаете объект json вместо массива json.Чтобы получить массив, вы можете попробовать следующее:

airports["airports"] = nlohmann::json::array()

new_airport = nlohmann::json::object()
new_airport["shortVersion"] = inputShortVersion;
new_airport["city"] = inputCity;
new_airport["address"] = inputAddress;

airports["airports"].emplace_back(new_airport);

Это можно записать короче с помощью фигурных списков инициализаторов за счет читабельности:

airports["airports"] = nlohmann::json::array()

airports["airports"].emplace_back(
    {
        {"shortVersion", inputShortVersion},
        {"city", inputCity},
        {"address", inputAddress}
    });
0 голосов
/ 27 февраля 2019

В вашем выводе есть контейнер sequence , но в вашем коде ассоциативный контейнер.

Попробуйте что-то вроде

json inputAirport;
inputAirport["shortVersion"] = inputShortVersion;
inputAirport["city"] = inputCity;
inputAirport["address"] = inputAddress;

airports["airports"].push_back(inputAirport);
...