Присвоение номеров данным .json для редактирования C++

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

У меня есть этот код:

int choice;
int numeration = 1;
for (auto& check : airports.items())   //outputs airport city and airport code numbered from 1
{
    std::cout << numeration << ". " << airports[check.key()]["city"] << " " << airports[check.key()]["shortVersion"] << std::endl;
    numeration++;
}

std::cout << "Your choice";    //user inputs the number of the displayed airport
std::cin >> choice;

А это файл .json.

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

Как присвоить отображаемому аэропорту номер, который вводит пользователь, чтобы программа позже редактировала переменные только из выбранных данных или удаляла всю группу, например (LGW) или (RIX) отдельно? Например, пользователь вводит 1 (Это для (LGW)) и позже он может редактировать переменные city, address или shortVersion в разделе (LGW).

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
453
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы сохранил аэропорты в массиве следующим образом:

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

Массивы в json упорядочены, см.: json.org. Затем вы должны использовать индекс, введенный пользователем, для доступа к желаемому аэропорту.

Обновлено: индекс подразумевается на основе порядка аэропорта в массиве json. «Лондон» будет иметь индекс 0, «Рига» — 1 и т. д.

Код для доступа к аэропорту будет зависеть от используемой вами библиотеки json. Псевдокод для этого будет примерно таким:

int user_selection = 1; // Whatever number the user picked...
JsonArray airports = json["airports"];
JsonObject airport = airports[user_selection]; // Index the array based on user's input
airport["city"] = "Amsterdam"; // Change city from Riga to Amsterdam

Edit2: Использование библиотеки nlohmann json:

#include "json.hpp"

#include <iostream>
#include <string>

std::string GenerateJson(const std::string& city, const std::string& address, const std::string& iata_code)
{
  json j;
  json j_array = json::array();
  json j_object = json::object();

  j_object["city"] = city;
  j_object["address"] = address;
  j_object["shortVersion"] = iata_code;
  j_array.emplace_back(j_object);
  j["airports"] = j_array;

  return j.dump(4);
}

int main()
{
  auto json = R"(
  {
      "airports": [{
              "address": "Horley, Gatwick RH6 0NP, UK",
              "city": "London",
              "shortVersion": "LGW"
          },
          {
              "address": "Marupe, LV-1053",
              "city": "Riga",
              "shortVersion": "RIX"
          }
      ]
  }
)"_json;

  int index = 1;
  auto& airports = json["airports"];
  for (const auto& airport : airports)
  {
    std::cout << index << ") " << airport["city"].get<std::string>() << " " << airport["shortVersion"].get<std::string>() << std::endl;
    ++index;
  }

  int choice = 0;
  std::cout << "Your choice:" << std::endl;
  std::cin >> choice;

  choice -= 1;

  std::string iata_code;
  std::cout << "Change IATA airport code:" << std::endl;
  std::cin >> iata_code;

  auto& airport = airports[choice];
  airport["shortVersion"] = iata_code;

  std::cout << json.dump(4) << std::endl;

  int any;
  std::cout << "Press any key to exit..." << std::endl;
  std::cin >> any;
}

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

Eddie 25.02.2019 14:29

Я использую библиотеку json.hpp от nlohmann. github.com/nlohmann/json это ссылка, по которой я ее получил, и она находится в одиночном включении. Не могли бы вы написать код с этой библиотекой? Я действительно новичок в json, всего несколько дней, и я действительно не знаю, как различаются даже эти библиотеки. Спасибо!

Eddie 25.02.2019 17:50

Спасибо, это то, что я ищу! Надеюсь, я смогу понять, как реализовать это в моем коде!

Eddie 26.02.2019 12:32

Вы случайно не знаете, как изменить мой json, чтобы он выглядел как ваш? Кажется, я нигде не могу найти в Google или на официальном сайте, как создать массив, подобный вашему. Мой создан с помощью пользовательского ввода, а код airports["airports"][inputShortVersion]["shortVersion"] = inputShortVersion; airports["airports"][inputShortVersion]["city"] = inputCity; airports["airports"][inputShortVersion]["address"] = inputAddress;

Eddie 26.02.2019 15:28

Другие вопросы по теме