Macros¶
Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp
header. See also the macro overview page.
Runtime assertions¶
- JSON_ASSERT(x) - control behavior of runtime assertions
Exceptions¶
- JSON_CATCH_USER(exception)
JSON_THROW_USER(exception)
JSON_TRY_USER - control exceptions - JSON_DIAGNOSTICS - control extended diagnostics
- JSON_NOEXCEPTION - switch off exceptions
Language support¶
- JSON_HAS_CPP_11
JSON_HAS_CPP_14
JSON_HAS_CPP_17
JSON_HAS_CPP_20 - set supported C++ standard - JSON_HAS_FILESYSTEM
JSON_HAS_EXPERIMENTAL_FILESYSTEM - controlstd::filesystem
support - JSON_HAS_RANGES - control
std::ranges
support - JSON_HAS_THREE_WAY_COMPARISON - control 3-way comparison support
- JSON_NO_IO - switch off functions relying on certain C++ I/O headers
- JSON_SKIP_UNSUPPORTED_COMPILER_CHECK - do not warn about unsupported compilers
- JSON_USE_GLOBAL_UDLS - place user-defined string literals (UDLs) into the global namespace
Library version¶
- JSON_SKIP_LIBRARY_VERSION_CHECK - skip library version check
- NLOHMANN_JSON_VERSION_MAJOR
NLOHMANN_JSON_VERSION_MINOR
NLOHMANN_JSON_VERSION_PATCH - library version information
Library namespace¶
- NLOHMANN_JSON_NAMESPACE - full name of the
nlohmann
namespace - NLOHMANN_JSON_NAMESPACE_BEGIN
NLOHMANN_JSON_NAMESPACE_END - open and close the library namespace - NLOHMANN_JSON_NAMESPACE_NO_VERSION - disable the version component of the inline namespace
Type conversions¶
- JSON_DISABLE_ENUM_SERIALIZATION - switch off default serialization/deserialization functions for enums
- JSON_USE_IMPLICIT_CONVERSIONS - control implicit conversions
Comparison behavior¶
- JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - control comparison of discarded values
Serialization/deserialization macros¶
- Enum: NLOHMANN_JSON_SERIALIZE_ENUM
-
Class/struct:
- Do you need to serialize private variables?
- Yes? Do you only need serialization?
- Yes?
NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE
- No? Allow deserialization of JSON values with missing values?
- Yes?
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT
- No?
NLOHMANN_DEFINE_TYPE_INTRUSIVE
- Yes?
- Yes?
- No? Do you only need serialization?
- Yes?
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE
- No? Allow deserialization of JSON values with missing values?
- Yes?
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT
- No?
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
- Yes?
- Yes?
- Yes? Do you only need serialization?
- Do you need to serialize private variables?
-
NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...)
NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...) - serialization/deserialization of types with access to private variables - NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...)
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...) - serialization/deserialization of types without access to private variables - NLOHMANN_JSON_SERIALIZE_ENUM(type, ...) - serialization/deserialization of enum types