Создание базы данных json с пользовательским вводом
Мне нужно создать массив.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 ответа
Решение
У вас есть контейнер последовательности в желаемом выводе, но ассоциативный контейнер в вашем коде.
Попробуйте что-то вроде
json inputAirport;
inputAirport["shortVersion"] = inputShortVersion;
inputAirport["city"] = inputCity;
inputAirport["address"] = inputAddress;
airports["airports"].push_back(inputAirport);
По-видимому, вы создаете объект 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}
});