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

384 lines
26 KiB
Markdown

# nlohmann::basic_json
Defined in header `<nlohmann/json.hpp>`
```
template<
template<typename U, typename V, typename... Args> class ObjectType = std::map,
template<typename U, typename... Args> class ArrayType = std::vector,
class StringType = std::string,
class BooleanType = bool,
class NumberIntegerType = std::int64_t,
class NumberUnsignedType = std::uint64_t,
class NumberFloatType = double,
template<typename U> class AllocatorType = std::allocator,
template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,
class BinaryType = std::vector<std::uint8_t>,
class CustomBaseClass = void
>
class basic_json;
```
## Template parameters
| Template parameter | Description | Derived type |
| -------------------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| `ObjectType` | type for JSON objects | [`object_t`](https://json.nlohmann.me/api/basic_json/object_t/index.md) |
| `ArrayType` | type for JSON arrays | [`array_t`](https://json.nlohmann.me/api/basic_json/array_t/index.md) |
| `StringType` | type for JSON strings and object keys | [`string_t`](https://json.nlohmann.me/api/basic_json/string_t/index.md) |
| `BooleanType` | type for JSON booleans | [`boolean_t`](https://json.nlohmann.me/api/basic_json/boolean_t/index.md) |
| `NumberIntegerType` | type for JSON integer numbers | [`number_integer_t`](https://json.nlohmann.me/api/basic_json/number_integer_t/index.md) |
| `NumberUnsignedType` | type for JSON unsigned integer numbers | [`number_unsigned_t`](https://json.nlohmann.me/api/basic_json/number_unsigned_t/index.md) |
| `NumberFloatType` | type for JSON floating-point numbers | [`number_float_t`](https://json.nlohmann.me/api/basic_json/number_float_t/index.md) |
| `AllocatorType` | type of the allocator to use | |
| `JSONSerializer` | the serializer to resolve internal calls to `to_json()` and `from_json()` | [`json_serializer`](https://json.nlohmann.me/api/basic_json/json_serializer/index.md) |
| `BinaryType` | type for binary arrays | [`binary_t`](https://json.nlohmann.me/api/basic_json/binary_t/index.md) |
| `CustomBaseClass` | extension point for user code | [`json_base_class_t`](https://json.nlohmann.me/api/basic_json/json_base_class_t/index.md) |
## Specializations
- [**json**](https://json.nlohmann.me/api/json/index.md) - default specialization
- [**ordered_json**](https://json.nlohmann.me/api/ordered_json/index.md) - a specialization that maintains the insertion order of object keys
## Iterator invalidation
All operations that add values to an **array** ([`push_back`](https://json.nlohmann.me/api/basic_json/push_back/index.md) , [`operator+=`](https://json.nlohmann.me/api/basic_json/operator%2B%3D/index.md), [`emplace_back`](https://json.nlohmann.me/api/basic_json/emplace_back/index.md), [`insert`](https://json.nlohmann.me/api/basic_json/insert/index.md), and [`operator[]`](https://json.nlohmann.me/api/basic_json/operator%5B%5D/index.md) for a non-existing index) can yield a reallocation, in which case all iterators (including the [`end()`](https://json.nlohmann.me/api/basic_json/end/index.md) iterator) and all references to the elements are invalidated.
For [`ordered_json`](https://json.nlohmann.me/api/ordered_json/index.md), also all operations that add a value to an **object** ([`push_back`](https://json.nlohmann.me/api/basic_json/push_back/index.md), [`operator+=`](https://json.nlohmann.me/api/basic_json/operator%2B%3D/index.md), [`emplace`](https://json.nlohmann.me/api/basic_json/emplace/index.md), [`insert`](https://json.nlohmann.me/api/basic_json/insert/index.md), [`update`](https://json.nlohmann.me/api/basic_json/update/index.md), and [`operator[]`](https://json.nlohmann.me/api/basic_json/operator%5B%5D/index.md) for a non-existing key) can yield a reallocation, in which case all iterators (including the [`end()`](https://json.nlohmann.me/api/basic_json/end/index.md) iterator) and all references to the elements are invalidated.
## Requirements
The class satisfies the following concept requirements:
### Basic
- [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible): JSON values can be default-constructed. The result will be a JSON null value.
- [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible): A JSON value can be constructed from an rvalue argument.
- [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible): A JSON value can be copy-constructed from an lvalue expression.
- [MoveAssignable](https://en.cppreference.com/w/cpp/named_req/MoveAssignable): A JSON value can be assigned from an rvalue argument.
- [CopyAssignable](https://en.cppreference.com/w/cpp/named_req/CopyAssignable): A JSON value can be copy-assigned from an lvalue expression.
- [Destructible](https://en.cppreference.com/w/cpp/named_req/Destructible): JSON values can be destructed.
### Layout
- [StandardLayoutType](https://en.cppreference.com/w/cpp/named_req/StandardLayoutType): JSON values have [standard layout](https://en.cppreference.com/w/cpp/language/data_members#Standard_layout): All non-static data members are private and standard layout types, the class has no virtual functions or (virtual) base classes.
### Library-wide
- [EqualityComparable](https://en.cppreference.com/w/cpp/named_req/EqualityComparable): JSON values can be compared with `==`, see [`operator==`](https://json.nlohmann.me/api/basic_json/operator_eq/index.md).
- [LessThanComparable](https://en.cppreference.com/w/cpp/named_req/LessThanComparable): JSON values can be compared with `<`, see [`operator<`](https://json.nlohmann.me/api/basic_json/operator_le/index.md).
- [Swappable](https://en.cppreference.com/w/cpp/named_req/Swappable): Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of other compatible types, using unqualified function `swap`.
- [NullablePointer](https://en.cppreference.com/w/cpp/named_req/NullablePointer): JSON values can be compared against `std::nullptr_t` objects which are used to model the `null` value.
### Container
- [Container](https://en.cppreference.com/w/cpp/named_req/Container): JSON values can be used like STL containers and provide iterator access.
- [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer): JSON values can be used like STL containers and provide reverse iterator access.
## Member types
- [**adl_serializer**](https://json.nlohmann.me/api/adl_serializer/index.md) - the default serializer
- [**value_t**](https://json.nlohmann.me/api/basic_json/value_t/index.md) - the JSON type enumeration
- [**json_pointer**](https://json.nlohmann.me/api/json_pointer/index.md) - JSON Pointer implementation
- [**json_serializer**](https://json.nlohmann.me/api/basic_json/json_serializer/index.md) - type of the serializer to for conversions from/to JSON
- [**error_handler_t**](https://json.nlohmann.me/api/basic_json/error_handler_t/index.md) - type to choose behavior on decoding errors
- [**cbor_tag_handler_t**](https://json.nlohmann.me/api/basic_json/cbor_tag_handler_t/index.md) - type to choose how to handle CBOR tags
- **initializer_list_t** - type for initializer lists of `basic_json` values
- [**input_format_t**](https://json.nlohmann.me/api/basic_json/input_format_t/index.md) - type to choose the format to parse
- [**json_sax_t**](https://json.nlohmann.me/api/json_sax/index.md) - type for SAX events
### Exceptions
- [**exception**](https://json.nlohmann.me/api/basic_json/exception/index.md) - general exception of the `basic_json` class
- [**parse_error**](https://json.nlohmann.me/api/basic_json/parse_error/index.md) - exception indicating a parse error
- [**invalid_iterator**](https://json.nlohmann.me/api/basic_json/invalid_iterator/index.md) - exception indicating errors with iterators
- [**type_error**](https://json.nlohmann.me/api/basic_json/type_error/index.md) - exception indicating executing a member function with a wrong type
- [**out_of_range**](https://json.nlohmann.me/api/basic_json/out_of_range/index.md) - exception indicating access out of the defined range
- [**other_error**](https://json.nlohmann.me/api/basic_json/other_error/index.md) - exception indicating other library errors
### Container types
| Type | Definition |
| ------------------------ | --------------------------------------------------------------------------------------------------------- |
| `value_type` | `basic_json` |
| `reference` | `value_type&` |
| `const_reference` | `const value_type&` |
| `difference_type` | `std::ptrdiff_t` |
| `size_type` | `std::size_t` |
| `allocator_type` | `AllocatorType<basic_json>` |
| `pointer` | `std::allocator_traits<allocator_type>::pointer` |
| `const_pointer` | `std::allocator_traits<allocator_type>::const_pointer` |
| `iterator` | [LegacyBidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator) |
| `const_iterator` | constant [LegacyBidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator) |
| `reverse_iterator` | reverse iterator, derived from `iterator` |
| `const_reverse_iterator` | reverse iterator, derived from `const_iterator` |
| `iteration_proxy` | helper type for [`items`](https://json.nlohmann.me/api/basic_json/items/index.md) function |
### JSON value data types
- [**array_t**](https://json.nlohmann.me/api/basic_json/array_t/index.md) - type for arrays
- [**binary_t**](https://json.nlohmann.me/api/basic_json/binary_t/index.md) - type for binary arrays
- [**boolean_t**](https://json.nlohmann.me/api/basic_json/boolean_t/index.md) - type for booleans
- [**default_object_comparator_t**](https://json.nlohmann.me/api/basic_json/default_object_comparator_t/index.md) - default comparator for objects
- [**number_float_t**](https://json.nlohmann.me/api/basic_json/number_float_t/index.md) - type for numbers (floating-point)
- [**number_integer_t**](https://json.nlohmann.me/api/basic_json/number_integer_t/index.md) - type for numbers (integer)
- [**number_unsigned_t**](https://json.nlohmann.me/api/basic_json/number_unsigned_t/index.md) - type for numbers (unsigned)
- [**object_comparator_t**](https://json.nlohmann.me/api/basic_json/object_comparator_t/index.md) - comparator for objects
- [**object_t**](https://json.nlohmann.me/api/basic_json/object_t/index.md) - type for objects
- [**string_t**](https://json.nlohmann.me/api/basic_json/string_t/index.md) - type for strings
### Parser callback
- [**parse_event_t**](https://json.nlohmann.me/api/basic_json/parse_event_t/index.md) - parser event types
- [**parser_callback_t**](https://json.nlohmann.me/api/basic_json/parser_callback_t/index.md) - per-element parser callback type
## Member functions
- [(constructor)](https://json.nlohmann.me/api/basic_json/basic_json/index.md)
- [(destructor)](https://json.nlohmann.me/api/basic_json/~basic_json/index.md)
- [**operator=**](https://json.nlohmann.me/api/basic_json/operator%3D/index.md) - copy assignment
- [**array**](https://json.nlohmann.me/api/basic_json/array/index.md) (*static*) - explicitly create an array
- [**binary**](https://json.nlohmann.me/api/basic_json/binary/index.md) (*static*) - explicitly create a binary array
- [**object**](https://json.nlohmann.me/api/basic_json/object/index.md) (*static*) - explicitly create an object
### Object inspection
Functions to inspect the type of a JSON value.
- [**type**](https://json.nlohmann.me/api/basic_json/type/index.md) - return the type of the JSON value
- [**operator value_t**](https://json.nlohmann.me/api/basic_json/operator_value_t/index.md) - return the type of the JSON value
- [**type_name**](https://json.nlohmann.me/api/basic_json/type_name/index.md) - return the type as string
- [**is_primitive**](https://json.nlohmann.me/api/basic_json/is_primitive/index.md) - return whether the type is primitive
- [**is_structured**](https://json.nlohmann.me/api/basic_json/is_structured/index.md) - return whether the type is structured
- [**is_null**](https://json.nlohmann.me/api/basic_json/is_null/index.md) - return whether the value is null
- [**is_boolean**](https://json.nlohmann.me/api/basic_json/is_boolean/index.md) - return whether the value is a boolean
- [**is_number**](https://json.nlohmann.me/api/basic_json/is_number/index.md) - return whether the value is a number
- [**is_number_integer**](https://json.nlohmann.me/api/basic_json/is_number_integer/index.md) - return whether the value is an integer number
- [**is_number_unsigned**](https://json.nlohmann.me/api/basic_json/is_number_unsigned/index.md) - return whether the value is an unsigned integer number
- [**is_number_float**](https://json.nlohmann.me/api/basic_json/is_number_float/index.md) - return whether the value is a floating-point number
- [**is_object**](https://json.nlohmann.me/api/basic_json/is_object/index.md) - return whether the value is an object
- [**is_array**](https://json.nlohmann.me/api/basic_json/is_array/index.md) - return whether the value is an array
- [**is_string**](https://json.nlohmann.me/api/basic_json/is_string/index.md) - return whether the value is a string
- [**is_binary**](https://json.nlohmann.me/api/basic_json/is_binary/index.md) - return whether the value is a binary array
- [**is_discarded**](https://json.nlohmann.me/api/basic_json/is_discarded/index.md) - return whether the value is discarded
Optional functions to access the [diagnostic positions](https://json.nlohmann.me/api/macros/json_diagnostic_positions/index.md).
- [**start_pos**](https://json.nlohmann.me/api/basic_json/start_pos/index.md) - return the start position of the value
- [**end_pos**](https://json.nlohmann.me/api/basic_json/end_pos/index.md) - return the one past the end position of the value
### Value access
Direct access to the stored value of a JSON value.
- [**get**](https://json.nlohmann.me/api/basic_json/get/index.md) - get a value
- [**get_to**](https://json.nlohmann.me/api/basic_json/get_to/index.md) - get a value and write it to a destination
- [**get_ptr**](https://json.nlohmann.me/api/basic_json/get_ptr/index.md) - get a pointer value
- [**get_ref**](https://json.nlohmann.me/api/basic_json/get_ref/index.md) - get a reference value
- [**operator ValueType**](https://json.nlohmann.me/api/basic_json/operator_ValueType/index.md) - get a value
- [**get_binary**](https://json.nlohmann.me/api/basic_json/get_binary/index.md) - get a binary value
### Element access
Access to the JSON value
- [**at**](https://json.nlohmann.me/api/basic_json/at/index.md) - access specified element with bounds checking
- [**operator[]**](https://json.nlohmann.me/api/basic_json/operator%5B%5D/index.md) - access specified element
- [**value**](https://json.nlohmann.me/api/basic_json/value/index.md) - access specified object element with default value
- [**front**](https://json.nlohmann.me/api/basic_json/front/index.md) - access the first element
- [**back**](https://json.nlohmann.me/api/basic_json/back/index.md) - access the last element
### Lookup
- [**find**](https://json.nlohmann.me/api/basic_json/find/index.md) - find an element in a JSON object
- [**count**](https://json.nlohmann.me/api/basic_json/count/index.md) - returns the number of occurrences of a key in a JSON object
- [**contains**](https://json.nlohmann.me/api/basic_json/contains/index.md) - check the existence of an element in a JSON object
### Iterators
- [**begin**](https://json.nlohmann.me/api/basic_json/begin/index.md) - returns an iterator to the first element
- [**cbegin**](https://json.nlohmann.me/api/basic_json/cbegin/index.md) - returns a const iterator to the first element
- [**end**](https://json.nlohmann.me/api/basic_json/end/index.md) - returns an iterator to one past the last element
- [**cend**](https://json.nlohmann.me/api/basic_json/cend/index.md) - returns a const iterator to one past the last element
- [**rbegin**](https://json.nlohmann.me/api/basic_json/rbegin/index.md) - returns an iterator to the reverse-beginning
- [**rend**](https://json.nlohmann.me/api/basic_json/rend/index.md) - returns an iterator to the reverse-end
- [**crbegin**](https://json.nlohmann.me/api/basic_json/crbegin/index.md) - returns a const iterator to the reverse-beginning
- [**crend**](https://json.nlohmann.me/api/basic_json/crend/index.md) - returns a const iterator to the reverse-end
- [**items**](https://json.nlohmann.me/api/basic_json/items/index.md) - wrapper to access iterator member functions in range-based for
### Capacity
- [**empty**](https://json.nlohmann.me/api/basic_json/empty/index.md) - checks whether the container is empty
- [**size**](https://json.nlohmann.me/api/basic_json/size/index.md) - returns the number of elements
- [**max_size**](https://json.nlohmann.me/api/basic_json/max_size/index.md) - returns the maximum possible number of elements
### Modifiers
- [**clear**](https://json.nlohmann.me/api/basic_json/clear/index.md) - clears the contents
- [**push_back**](https://json.nlohmann.me/api/basic_json/push_back/index.md) - add a value to an array/object
- [**operator+=**](https://json.nlohmann.me/api/basic_json/operator%2B%3D/index.md) - add a value to an array/object
- [**emplace_back**](https://json.nlohmann.me/api/basic_json/emplace_back/index.md) - add a value to an array
- [**emplace**](https://json.nlohmann.me/api/basic_json/emplace/index.md) - add a value to an object if a key does not exist
- [**erase**](https://json.nlohmann.me/api/basic_json/erase/index.md) - remove elements
- [**insert**](https://json.nlohmann.me/api/basic_json/insert/index.md) - inserts elements
- [**update**](https://json.nlohmann.me/api/basic_json/update/index.md) - updates a JSON object from another object, overwriting existing keys
- [**swap**](https://json.nlohmann.me/api/basic_json/swap/index.md) - exchanges the values
### Lexicographical comparison operators
- [**operator==**](https://json.nlohmann.me/api/basic_json/operator_eq/index.md) - comparison: equal
- [**operator!=**](https://json.nlohmann.me/api/basic_json/operator_ne/index.md) - comparison: not equal
- [**operator\<**](https://json.nlohmann.me/api/basic_json/operator_lt/index.md) - comparison: less than
- [**operator>**](https://json.nlohmann.me/api/basic_json/operator_gt/index.md) - comparison: greater than
- [**operator\<=**](https://json.nlohmann.me/api/basic_json/operator_le/index.md) - comparison: less than or equal
- [**operator>=**](https://json.nlohmann.me/api/basic_json/operator_ge/index.md) - comparison: greater than or equal
- [**operator\<=>**](https://json.nlohmann.me/api/basic_json/operator_spaceship/index.md) - comparison: 3-way
### Serialization / Dumping
- [**dump**](https://json.nlohmann.me/api/basic_json/dump/index.md) - serialization
### Deserialization / Parsing
- [**parse**](https://json.nlohmann.me/api/basic_json/parse/index.md) (*static*) - deserialize from a compatible input
- [**accept**](https://json.nlohmann.me/api/basic_json/accept/index.md) (*static*) - check if the input is valid JSON
- [**sax_parse**](https://json.nlohmann.me/api/basic_json/sax_parse/index.md) (*static*) - generate SAX events
### JSON Pointer functions
- [**flatten**](https://json.nlohmann.me/api/basic_json/flatten/index.md) - return flattened JSON value
- [**unflatten**](https://json.nlohmann.me/api/basic_json/unflatten/index.md) - unflatten a previously flattened JSON value
### JSON Patch functions
- [**patch**](https://json.nlohmann.me/api/basic_json/patch/index.md) - applies a JSON patch
- [**patch_inplace**](https://json.nlohmann.me/api/basic_json/patch_inplace/index.md) - applies a JSON patch in place
- [**diff**](https://json.nlohmann.me/api/basic_json/diff/index.md) (*static*) - creates a diff as a JSON patch
### JSON Merge Patch functions
- [**merge_patch**](https://json.nlohmann.me/api/basic_json/merge_patch/index.md) - applies a JSON Merge Patch
## Static functions
- [**meta**](https://json.nlohmann.me/api/basic_json/meta/index.md) - returns version information on the library
- [**get_allocator**](https://json.nlohmann.me/api/basic_json/get_allocator/index.md) - returns the allocator associated with the container
### Binary formats
- [**from_bjdata**](https://json.nlohmann.me/api/basic_json/from_bjdata/index.md) (*static*) - create a JSON value from an input in BJData format
- [**from_bson**](https://json.nlohmann.me/api/basic_json/from_bson/index.md) (*static*) - create a JSON value from an input in BSON format
- [**from_cbor**](https://json.nlohmann.me/api/basic_json/from_cbor/index.md) (*static*) - create a JSON value from an input in CBOR format
- [**from_msgpack**](https://json.nlohmann.me/api/basic_json/from_msgpack/index.md) (*static*) - create a JSON value from an input in MessagePack format
- [**from_ubjson**](https://json.nlohmann.me/api/basic_json/from_ubjson/index.md) (*static*) - create a JSON value from an input in UBJSON format
- [**to_bjdata**](https://json.nlohmann.me/api/basic_json/to_bjdata/index.md) (*static*) - create a BJData serialization of a given JSON value
- [**to_bson**](https://json.nlohmann.me/api/basic_json/to_bson/index.md) (*static*) - create a BSON serialization of a given JSON value
- [**to_cbor**](https://json.nlohmann.me/api/basic_json/to_cbor/index.md) (*static*) - create a CBOR serialization of a given JSON value
- [**to_msgpack**](https://json.nlohmann.me/api/basic_json/to_msgpack/index.md) (*static*) - create a MessagePack serialization of a given JSON value
- [**to_ubjson**](https://json.nlohmann.me/api/basic_json/to_ubjson/index.md) (*static*) - create a UBJSON serialization of a given JSON value
## Non-member functions
- [**operator\<<(std::ostream&)**](https://json.nlohmann.me/api/operator_ltlt/index.md) - serialize to stream
- [**operator>>(std::istream&)**](https://json.nlohmann.me/api/operator_gtgt/index.md) - deserialize from stream
- [**to_string**](https://json.nlohmann.me/api/basic_json/to_string/index.md) - user-defined `to_string` function for JSON values
- [**format_as**](https://json.nlohmann.me/api/basic_json/format_as/index.md) - user-defined `format_as` function for JSON values (fmt support)
## Literals
- [**operator""\_json**](https://json.nlohmann.me/api/operator_literal_json/index.md) - user-defined string literal for JSON values
## Helper classes
- [**std::formatter\<basic_json>**](https://json.nlohmann.me/api/basic_json/std_formatter/index.md) - make JSON values formattable with `std::format`
- [**std::hash\<basic_json>**](https://json.nlohmann.me/api/basic_json/std_hash/index.md) - return a hash value for a JSON object
- [**std::swap\<basic_json>**](https://json.nlohmann.me/api/basic_json/std_swap/index.md) - exchanges the values of two JSON objects
## Examples
Example
The example shows how the library is used.
```
#include <iostream>
#include <iomanip>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main()
{
// create a JSON object
json j =
{
{"pi", 3.141},
{"happy", true},
{"name", "Niels"},
{"nothing", nullptr},
{
"answer", {
{"everything", 42}
}
},
{"list", {1, 0, 2}},
{
"object", {
{"currency", "USD"},
{"value", 42.99}
}
}
};
// add new values
j["new"]["key"]["value"] = {"another", "list"};
// count elements
auto s = j.size();
j["size"] = s;
// pretty print with indent of 4 spaces
std::cout << std::setw(4) << j << '\n';
}
```
Output:
```
{
"answer": {
"everything": 42
},
"happy": true,
"list": [
1,
0,
2
],
"name": "Niels",
"new": {
"key": {
"value": [
"another",
"list"
]
}
},
"nothing": null,
"object": {
"currency": "USD",
"value": 42.99
},
"pi": 3.141,
"size": 8
}
```
## See also
- [RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format](https://tools.ietf.org/html/rfc8259)
## Version history
- Added in version 1.0.0.