Files
json/api/macros/nlohmann_json_namespace_begin/index.md
T
2026-07-08 18:19:46 +00:00

92 lines
2.3 KiB
Markdown

# 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](https://json.nlohmann.me/features/namespace/#structure) for details.
1. Opens the namespace.
1. 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](https://json.nlohmann.me/features/namespace/#structure).
1. Default definition of `NLOHMANN_JSON_NAMESPACE_BEGIN`:
```
namespace nlohmann
{
inline namespace json_abi_v3_12_0
{
```
1. Default definition of `NLOHMANN_JSON_NAMESPACE_END`:
```
} // namespace json_abi_v3_12_0
} // 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?](https://json.nlohmann.me/features/arbitrary_types/#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](https://json.nlohmann.me/features/namespace/index.md)
- [NLOHMANN_JSON_NAMESPACE](https://json.nlohmann.me/api/macros/nlohmann_json_namespace/index.md)
- [`NLOHMANN_JSON_NAMESPACE_NO_VERSION`](https://json.nlohmann.me/api/macros/nlohmann_json_namespace_no_version/index.md)
## Version history
- Added in version 3.11.0. Changed inline namespace name in version 3.11.2.