// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ (supporting code) // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013-2026 Niels Lohmann // SPDX-License-Identifier: MIT // See values.cpp: the conversion macros and nlohmann::adl_serializer must be available through // alone. NLOHMANN_JSON_SERIALIZE_ENUM (from the same header as // NLOHMANN_DEFINE_TYPE_INTRUSIVE) is left out: IWYU attributes the basic_json comparison in its // expansion to an unrelated standard header, the ambiguity described for json.hpp in cmake/ci.cmake. #include #include namespace ns { struct person { std::string name; int age; NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, age) }; struct legacy { int value; }; } // namespace ns namespace nlohmann { template<> struct adl_serializer { static void to_json(json& j, const ns::legacy& l) { j = l.value; } static void from_json(const json& j, ns::legacy& l) { l.value = j.get(); } }; } // namespace nlohmann int main() { ns::person ada; ada.name = "Ada"; ada.age = 36; ns::legacy one; one.value = 1; const nlohmann::json j = ada; const auto p = j.get(); const auto l = nlohmann::json(one).get(); return p.age - 36 + l.value - 1; }