1c5f01b2fSopenharmony_ci#include <iostream> 2c5f01b2fSopenharmony_ci#include <nlohmann/json.hpp> 3c5f01b2fSopenharmony_ci 4c5f01b2fSopenharmony_ciusing json = nlohmann::json; 5c5f01b2fSopenharmony_ci 6c5f01b2fSopenharmony_cinamespace ns 7c5f01b2fSopenharmony_ci{ 8c5f01b2fSopenharmony_ci// a simple struct to model a person (not default constructible) 9c5f01b2fSopenharmony_cistruct person 10c5f01b2fSopenharmony_ci{ 11c5f01b2fSopenharmony_ci person(std::string n, std::string a, int aa) 12c5f01b2fSopenharmony_ci : name(std::move(n)), address(std::move(a)), age(aa) 13c5f01b2fSopenharmony_ci {} 14c5f01b2fSopenharmony_ci 15c5f01b2fSopenharmony_ci std::string name; 16c5f01b2fSopenharmony_ci std::string address; 17c5f01b2fSopenharmony_ci int age; 18c5f01b2fSopenharmony_ci}; 19c5f01b2fSopenharmony_ci} // namespace ns 20c5f01b2fSopenharmony_ci 21c5f01b2fSopenharmony_cinamespace nlohmann 22c5f01b2fSopenharmony_ci{ 23c5f01b2fSopenharmony_citemplate <> 24c5f01b2fSopenharmony_cistruct adl_serializer<ns::person> 25c5f01b2fSopenharmony_ci{ 26c5f01b2fSopenharmony_ci static ns::person from_json(const json& j) 27c5f01b2fSopenharmony_ci { 28c5f01b2fSopenharmony_ci return {j.at("name"), j.at("address"), j.at("age")}; 29c5f01b2fSopenharmony_ci } 30c5f01b2fSopenharmony_ci 31c5f01b2fSopenharmony_ci // Here's the catch! You must provide a to_json method! Otherwise, you 32c5f01b2fSopenharmony_ci // will not be able to convert person to json, since you fully 33c5f01b2fSopenharmony_ci // specialized adl_serializer on that type 34c5f01b2fSopenharmony_ci static void to_json(json& j, ns::person p) 35c5f01b2fSopenharmony_ci { 36c5f01b2fSopenharmony_ci j["name"] = p.name; 37c5f01b2fSopenharmony_ci j["address"] = p.address; 38c5f01b2fSopenharmony_ci j["age"] = p.age; 39c5f01b2fSopenharmony_ci } 40c5f01b2fSopenharmony_ci}; 41c5f01b2fSopenharmony_ci} // namespace nlohmann 42c5f01b2fSopenharmony_ci 43c5f01b2fSopenharmony_ciint main() 44c5f01b2fSopenharmony_ci{ 45c5f01b2fSopenharmony_ci json j; 46c5f01b2fSopenharmony_ci j["name"] = "Ned Flanders"; 47c5f01b2fSopenharmony_ci j["address"] = "744 Evergreen Terrace"; 48c5f01b2fSopenharmony_ci j["age"] = 60; 49c5f01b2fSopenharmony_ci 50c5f01b2fSopenharmony_ci auto p = j.get<ns::person>(); 51c5f01b2fSopenharmony_ci 52c5f01b2fSopenharmony_ci std::cout << p.name << " (" << p.age << ") lives in " << p.address << std::endl; 53c5f01b2fSopenharmony_ci} 54