Skip to content

NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END

#define NLOHMANN_JSON_NAMESPACE_BEGIN /* value */  // (1)
#define NLOHMANN_JSON_NAMESPACE_END   /* value */  // (2)

These macros can be used to open and close the nlohmann namespace. See nlohmann Namespace for details.

  1. Opens the namespace.
  2. Closes the namespace.

Default definition

The default definitions open and close the nlohmann namespace. The precise definition of [NLOHMANN_JSON_NAMESPACE_BEGIN] varies as described here.

  1. Default definition of NLOHMANN_JSON_NAMESPACE_BEGIN:

    namespace nlohmann
    {
    inline namespace json_abi_v3_11_2
    {
    
  2. Default definition of NLOHMANN_JSON_NAMESPACE_END:

    }  // namespace json_abi_v3_11_2
    }  // namespace nlohmann
    

When these macros are not defined, the library will define them to their default definitions.

Examples

Example

The example shows how to use NLOHMANN_JSON_NAMESPACE_BEGIN/NLOHMANN_JSON_NAMESPACE_END from the How do I convert third-party types? page.

#include <iostream>
#include <optional>
#include <nlohmann/json.hpp>

// partial specialization (see https://json.nlohmann.me/features/arbitrary_types/)
NLOHMANN_JSON_NAMESPACE_BEGIN
template <typename T>
struct adl_serializer<std::optional<T>>
{
    static void to_json(json& j, const std::optional<T>& opt)
    {
        if (opt == std::nullopt)
        {
            j = nullptr;
        }
        else
        {
            j = *opt;
        }
    }
};
NLOHMANN_JSON_NAMESPACE_END

int main()
{
    std::optional<int> o1 = 1;
    std::optional<int> o2 = std::nullopt;

    NLOHMANN_JSON_NAMESPACE::json j;
    j.push_back(o1);
    j.push_back(o2);
    std::cout << j << std::endl;
}

Output:

[1,null]

See also

Version history

  • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.

Last update: August 10, 2022