# NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END - JSON for Modern C++
Author: Niels Lohmann

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

- `nlohmann` Namespace
- NLOHMANN_JSON_NAMESPACE
- `NLOHMANN_JSON_NAMESPACE_NO_VERSION`

## Version history

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

January 1, 2026