nlohmann_define_type_non_intrusive_explicit.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include <iostream>
  2. #include <nlohmann/json.hpp>
  3. using json = nlohmann::json;
  4. using namespace nlohmann::literals;
  5. namespace ns
  6. {
  7. struct person
  8. {
  9. std::string name;
  10. std::string address;
  11. int age;
  12. };
  13. void to_json(nlohmann::json& nlohmann_json_j, const person& nlohmann_json_t)
  14. {
  15. nlohmann_json_j["name"] = nlohmann_json_t.name;
  16. nlohmann_json_j["address"] = nlohmann_json_t.address;
  17. nlohmann_json_j["age"] = nlohmann_json_t.age;
  18. }
  19. void from_json(const nlohmann::json& nlohmann_json_j, person& nlohmann_json_t)
  20. {
  21. nlohmann_json_t.name = nlohmann_json_j.at("name");
  22. nlohmann_json_t.address = nlohmann_json_j.at("address");
  23. nlohmann_json_t.age = nlohmann_json_j.at("age");
  24. }
  25. } // namespace ns
  26. int main()
  27. {
  28. ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60};
  29. // serialization: person -> json
  30. json j = p;
  31. std::cout << "serialization: " << j << std::endl;
  32. // deserialization: json -> person
  33. json j2 = R"({"address": "742 Evergreen Terrace", "age": 40, "name": "Homer Simpson"})"_json;
  34. auto p2 = j2.get<ns::person>();
  35. // incomplete deserialization:
  36. json j3 = R"({"address": "742 Evergreen Terrace", "name": "Maggie Simpson"})"_json;
  37. try
  38. {
  39. auto p3 = j3.get<ns::person>();
  40. }
  41. catch (json::exception& e)
  42. {
  43. std::cout << "deserialization failed: " << e.what() << std::endl;
  44. }
  45. }