cpp struct json相互转换

#include <iostream> #include "nlohmann/json.hpp" using nlohmann::json; struct Dog { std::string Name; // to_json 和 from_json 需要在同一命名空间下 void to_json(json& j) { j["Name"] = Name; } void from_json(const json& j) { j.at("Name").get_to(Name); } }; struct Phone { std::string Ptype; int Pnum; // to_json 和 from_json 需要在同一命名空间下 void to_json(json& j) { j = {{"Ptype", Ptype},{"Pnum",Pnum}}; } void from_json(const json& j) { j.at("Ptype").get_to(Ptype); j.at("Pnum").get_to(Pnum); } }; struct User { std::string Name; int Age; std::map<std::string, int> Score; std::map<std::string, Dog> Pets; Phone MPhone; // to_json 和 from_json 需要在同一命名空间下 void to_json(json& j) { j = json{{"Name", Name}, {"Age", Age}}; MPhone.to_json(j["MPhone"]); // 对象属性to_json for (auto& pair : Pets) { pair.second.to_json(j["Pets"][pair.first]); // map+对象 } for (const auto& pair : Score) { // map+int j["Score"][pair.first] = pair.second; } } void from_json(const json& j) { j.at("Name").get_to(Name); j.at("Age").get_to(Age); if(j.contains("Pets")){ for (const auto& pair : j.at("Pets").items()) { Pets[pair.key()] = Dog(); Pets[pair.key()].from_json(pair.value()); } } for (const auto& pair : j.at("Score").items()) { Score[pair.key()] = pair.value(); } } void from_json(std::string json_str) { json j = json::parse(json_str); from_json(j); } }; int main(){ User user; user.Name = "zhangsi"; user.Age = 25; Phone p{"Mi", 1234}; user.MPhone = p; user.Score["math"] = 88; user.Score["art"] = 89; user.Pets["大黄"] = Dog{"大黄"}; user.Pets["小黑"] = Dog{"小黑"}; json j; user.to_json(j); std::cout << "to_json: " << j.dump() << std::endl; std::cout << "to_json with indent:\n" << j.dump(4) << std::endl; User new_user; new_user.from_json(j); std::cout << "\n\nuser from json: User\nName: " << new_user.Name << "\nAge: " << new_user.Age << std::endl; }
上一篇:华为仓颉可以取代 Java 吗?


下一篇:CentOS 下安装 WebRTC