Skip to content

# 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 - control `std::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

## 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

- NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)
  NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(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...) - serialization/deserialization of types without access to private variables
- NLOHMANN_JSON_SERIALIZE_ENUM(type, ...) - serialization/deserialization of enum types

Last update: July 31, 2022
Back to top