a class to store JSON values
<nlohmann/json.hpp>
template<
    template<
    typename U,
    typename V,
    typename... Args> typename ObjectType = map,
    template<
    typename U,
    typename... Args> typename ArrayType = vector,
    class StringType = std::string,
    class BooleanType = bool,
    class NumberIntegerType = int64_t,
    class NumberUnsignedType = uint64_t,
    class NumberFloatType = double,
    template<typename U> typename AllocatorType = allocator,
    template<
    typename T,
    typename SFINAE = void> typename JSONSerializer = adl_serializer,
    class BinaryType = std::vector<uint8_t>,
    class CustomBaseClass = void>
class basic_json
    : public nlohmann::detail::json_base_class<CustomBaseClass>
| Name | Description | 
|---|---|
| nlohmann::detail::json_base_class<CustomBaseClass> | 
| Name | Description | 
|---|---|
| allocator_type | the allocator type | 
| array_t | a type for an array | 
| binary_t | a type for a packed binary type | 
| bjdata_version_t | how to encode BJData | 
| boolean_t | a type for a boolean | 
| cbor_tag_handler_t | how to treat CBOR tags | 
| const_iterator | a const iterator for a basic_json container | 
| const_pointer | the type of an element const pointer | 
| const_reference | the type of an element const reference | 
| const_reverse_iterator | a const reverse iterator for a basic_json container | 
| default_object_comparator_t | |
| difference_type | a type to represent differences between iterators | 
| error_handler_t | how to treat decoding errors | 
| exception | Classes to implement user-defined exceptions. @{ | 
| initializer_list_t | helper type for initializer lists of basic_json values | 
| input_format_t | |
| invalid_iterator | |
| iterator | an iterator for a basic_json container | 
| json_pointer | JSON Pointer, see nlohmann::json_pointer | 
| json_sax_t | SAX interface type, see nlohmann::json_sax | 
| json_serializer | |
| number_float_t | a type for a number (floating-point) | 
| number_integer_t | a type for a number (integer) | 
| number_unsigned_t | a type for a number (unsigned) | 
| object_comparator_t | object key comparator type | 
| object_t | a type for an object | 
| other_error | |
| out_of_range | |
| parse_error | |
| parse_event_t | parser event types | 
| parser_callback_t | per-element parser callback type | 
| pointer | the type of an element pointer | 
| reference | the type of an element reference | 
| reverse_iterator | a reverse iterator for a basic_json container | 
| size_type | a type to represent container sizes | 
| string_t | a type for a string | 
| type_error | |
| value_t | |
| value_type | the type of elements in a basic_json container | 
| Name | Description | 
|---|---|
| basic_json[constructor] | copy constructor | 
| basic_json[constructor] | move constructor | 
| basic_json[constructor] | create a null object | 
| basic_json[constructor] | create an empty value with a given type | 
| basic_json[constructor] | create a JSON value from an existing one | 
| basic_json[constructor] | //////////////////////////////////// | 
| basic_json[constructor] | create a JSON value from compatible types | 
| basic_json[constructor] | construct an array with count copies of given value | 
| basic_json[constructor] | construct a JSON container given an iterator range | 
| basic_json[constructor] | create a container (array or object) from an initializer list | 
| ~basic_json[destructor] | destructor | 
| operator= | copy assignment | 
| at | access specified array element with bounds checking | 
| at | access specified array element with bounds checking | 
| at | access specified element via JSON Pointer | 
| at | access specified element via JSON Pointer | 
| at | access specified object element with bounds checking | 
| at | access specified object element with bounds checking | 
| at | |
| at | |
| at | access specified object element with bounds checking | 
| at | access specified object element with bounds checking | 
| back | access the last element | 
| back | access the last element | 
| begin | returns an iterator to the first element | 
| begin | returns an iterator to the first element | 
| cbegin | returns a const iterator to the first element | 
| cend | returns an iterator to one past the last element | 
| clear | clears the contents | 
| contains | check the existence of an element in a JSON object given a JSON pointer | 
| contains | check the existence of an element in a JSON object | 
| contains | |
| contains | check the existence of an element in a JSON object | 
| count | returns the number of occurrences of a key in a JSON object | 
| count | returns the number of occurrences of a key in a JSON object | 
| crbegin | returns a const reverse iterator to the last element | 
| crend | returns a const reverse iterator to one before the first | 
| dump | serialization | 
| emplace | add an object to an object if key does not exist | 
| emplace_back | add an object to an array | 
| empty | checks whether the container is empty. | 
| end | returns an iterator to one past the last element | 
| end | returns an iterator to one past the last element | 
| erase | remove element from a JSON array given an index | 
| erase | remove element from a JSON object given a key | 
| erase | remove element given an iterator | 
| erase | remove element from a JSON object given a key | 
| erase | remove elements given an iterator range | 
| find | find an element in a JSON object | 
| find | find an element in a JSON object | 
| find | find an element in a JSON object | 
| find | find an element in a JSON object | 
| flatten | return flattened JSON value | 
| front | access the first element | 
| front | access the first element | 
| get | get a pointer value (explicit) | 
| get | get a (pointer) value (explicit) | 
| get_binary | get a binary value | 
| get_binary | get a binary value | 
| get_ptr | get a pointer value (implicit) | 
| get_ptr | get a pointer value (implicit) | 
| get_ref | get a reference value (implicit) | 
| get_ref | get a reference value (implicit) | 
| get_to | get a value (explicit) | 
| get_to | |
| get_to | |
| insert | inserts range of elements into object | 
| insert | inserts elements from initializer list into array | 
| insert | inserts element into array | 
| insert | inserts element into array | 
| insert | inserts range of elements into array | 
| insert | inserts copies of element into array | 
| insert_iterator | Helper for insertion of an iterator | 
| is_array | return whether value is an array | 
| is_binary | return whether value is a binary array | 
| is_boolean | return whether value is a boolean | 
| is_discarded | return whether value is discarded | 
| is_null | return whether value is null | 
| is_number | return whether value is a number | 
| is_number_float | return whether value is a floating-point number | 
| is_number_integer | return whether value is an integer number | 
| is_number_unsigned | return whether value is an unsigned integer number | 
| is_object | return whether value is an object | 
| is_primitive | return whether type is primitive | 
| is_string | return whether value is a string | 
| is_structured | return whether type is structured | 
| items | helper to access iterator member functions in range-based for | 
| items | helper to access iterator member functions in range-based for | 
| max_size | returns the maximum possible number of elements | 
| merge_patch | applies a JSON Merge Patch | 
| operator+= | add an object to an object | 
| operator+= | add an object to an array | 
| operator+= | add an object to an object | 
| operator+= | add an object to an array | 
| operator[] | access specified object element | 
| operator[] | access specified array element | 
| operator[] | access specified array element | 
| operator[] | access specified element via JSON Pointer | 
| operator[] | access specified element via JSON Pointer | 
| operator[] | access specified object element | 
| operator[] | Subscript operator | 
| operator[] | Subscript operator | 
| operator[] | access specified object element | 
| operator[] | access specified object element | 
| operator[] | Subscript operator | 
| operator[] | Subscript operator | 
| patch | applies a JSON patch to a copy of the current object | 
| patch_inplace | applies a JSON patch in-place without copying the object | 
| push_back | add an object to an object | 
| push_back | add an object to an array | 
| push_back | add an object to an object | 
| push_back | add an object to an array | 
| rbegin | returns an iterator to the reverse-beginning | 
| rbegin | returns an iterator to the reverse-beginning | 
| rend | returns an iterator to the reverse-end | 
| rend | returns an iterator to the reverse-end | 
| size | returns the number of elements | 
| swap | exchanges the values | 
| swap | exchanges the values | 
| swap | exchanges the values | 
| swap | exchanges the values | 
| swap | exchanges the values | 
| swap | exchanges the values | 
| type | return the type of the JSON value (explicit) | 
| type_name | return the type as string | 
| unflatten | unflatten a previously flattened JSON value | 
| update | updates a JSON object from another object, overwriting existing keys | 
| update | updates a JSON object from another object, overwriting existing keys | 
| value | access specified object element via JSON Pointer with default value | 
| value | access specified object element with default value | 
| value | access specified object element via JSON Pointer with default value | 
| value | access specified object element with default value | 
| value | |
| value | access specified object element with default value | 
| value | |
| value | access specified object element via JSON Pointer with default value | 
| operator ValueType | get a value (implicit) | 
| operator value_t | return the type of the JSON value (implicit) | 
| operator== | comparison: equal | 
| operator== | comparison: equal | 
| operator!= | comparison: not equal | 
| operator<=> | comparison: 3-way | 
| operator<=> | comparison: 3-way | 
| Name | Description | 
|---|---|
| accept | |
| accept | check if the input is valid JSON | 
| accept | check if the input is valid JSON | 
| array | explicitly create an array from an initializer list | 
| binary | explicitly create a binary array (without subtype) | 
| binary | explicitly create a binary array | 
| binary | explicitly create a binary array (with subtype) | 
| binary | explicitly create a binary array (with subtype) | 
| diff | creates a diff as a JSON patch | 
| from_bjdata | create a JSON value from an input in BJData format | 
| from_bjdata | create a JSON value from an input in BJData format | 
| from_bson | |
| from_bson | create a JSON value from an input in BSON format | 
| from_bson | create a JSON value from an input in BSON format | 
| from_bson | |
| from_cbor | |
| from_cbor | create a JSON value from an input in CBOR format | 
| from_cbor | create a JSON value from an input in CBOR format | 
| from_cbor | |
| from_msgpack | |
| from_msgpack | create a JSON value from an input in MessagePack format | 
| from_msgpack | create a JSON value from an input in MessagePack format | 
| from_msgpack | |
| from_ubjson | |
| from_ubjson | create a JSON value from an input in UBJSON format | 
| from_ubjson | create a JSON value from an input in UBJSON format | 
| from_ubjson | |
| get_allocator | returns the allocator associated with the container | 
| iterator_wrapper | wrapper to access iterator member functions in range-based for | 
| iterator_wrapper | wrapper to access iterator member functions in range-based for | 
| meta | returns version information on the library | 
| object | explicitly create an object from an initializer list | 
| parse | |
| parse | deserialize from a compatible input | 
| parse | deserialize from a pair of character iterators | 
| sax_parse | generate SAX events | 
| sax_parse | generate SAX events | 
| sax_parse | generate SAX events | 
| to_bjdata | create a BJData serialization of a given JSON value | 
| to_bjdata | create a BJData serialization of a given JSON value | 
| to_bjdata | create a BJData serialization of a given JSON value | 
| to_bson | create a BSON serialization of a given JSON value | 
| to_bson | create a BSON serialization of a given JSON value | 
| to_bson | create a BSON serialization of a given JSON value | 
| to_cbor | create a CBOR serialization of a given JSON value | 
| to_cbor | create a CBOR serialization of a given JSON value | 
| to_cbor | create a CBOR serialization of a given JSON value | 
| to_msgpack | create a MessagePack serialization of a given JSON value | 
| to_msgpack | create a MessagePack serialization of a given JSON value | 
| to_msgpack | create a MessagePack serialization of a given JSON value | 
| to_ubjson | create a UBJSON serialization of a given JSON value | 
| to_ubjson | create a UBJSON serialization of a given JSON value | 
| to_ubjson | create a UBJSON serialization of a given JSON value | 
| Name | Description | 
|---|---|
| operator>> | deserialize from stream | 
| operator<< | deserialize from stream | 
| operator>> | serialize to stream | 
| operator<< | serialize to stream | 
| swap | exchanges the values | 
| exception | general exception of the basic_jsonclass | 
| serializer | |
| json_pointer | 
| Name | Description | 
|---|---|
| operator<< | deserialize from stream | 
| operator>> | serialize to stream | 
| to_string | user-defined to_string function for JSON values | 
a class to store JSON values
@invariant The member variables @a m_value and @a m_type have the following
relationship:
- If `m_type == value_t::object`, then `m_value.object != nullptr`.
- If `m_type == value_t::array`, then `m_value.array != nullptr`.
- If `m_type == value_t::string`, then `m_value.string != nullptr`.
The invariants are checked by member function assert_invariant().
@note ObjectType trick from https://stackoverflow.com/a/9860911