为 .json 数据分配数字以编辑 C++
Assigning numbers to .json data for editing 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 (That's for (LGW)),然后他可以编辑 (LGW) 下的 city
、address
或 shortVersion
变量。
我会将机场存储在一个数组中,如下所示:
{
"airports": [{
"address": "Horley, Gatwick RH6 0NP, UK",
"city": "London",
"shortVersion": "(LGW)"
},
{
"address": "Marupe, LV-1053",
"city": "Riga",
"shortVersion": "(RIX)"
}
]
}
json 中的数组已排序,请参阅:json.org。然后,您将使用用户输入的索引访问所需的机场。
编辑:索引是根据 json 数组中机场的顺序隐含的。 "London" 将是索引 0,"Riga" 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;
}
我需要将用户输入的数字分配给 .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 (That's for (LGW)),然后他可以编辑 (LGW) 下的 city
、address
或 shortVersion
变量。
我会将机场存储在一个数组中,如下所示:
{
"airports": [{
"address": "Horley, Gatwick RH6 0NP, UK",
"city": "London",
"shortVersion": "(LGW)"
},
{
"address": "Marupe, LV-1053",
"city": "Riga",
"shortVersion": "(RIX)"
}
]
}
json 中的数组已排序,请参阅:json.org。然后,您将使用用户输入的索引访问所需的机场。
编辑:索引是根据 json 数组中机场的顺序隐含的。 "London" 将是索引 0,"Riga" 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;
}