Flow123d
master-3768d5dec
|
a class to store JSON values More...
#include <json.hpp>
Classes | |
class | const_iterator |
a const random access iterator for the basic_json class More... | |
struct | internal_iterator |
an iterator value More... | |
class | iteration_proxy |
proxy class for the iterator_wrapper functions More... | |
class | iterator |
a mutable random access iterator for the basic_json class More... | |
class | json_reverse_iterator |
a template for a reverse iterator class More... | |
union | json_value |
a JSON value More... | |
class | lexer |
lexical analysis More... | |
class | parser |
syntax analysis More... | |
class | primitive_iterator_t |
an iterator for primitive JSON types More... | |
Public Types | |
enum | value_t : uint8_t { value_t::null, value_t::object, value_t::array, value_t::string, value_t::boolean, value_t::number_integer, value_t::number_unsigned, value_t::number_float, value_t::discarded } |
the JSON type enumeration More... | |
enum | parse_event_t : uint8_t { parse_event_t::object_start, parse_event_t::object_end, parse_event_t::array_start, parse_event_t::array_end, parse_event_t::key, parse_event_t::value } |
JSON callback events. More... | |
using | parser_callback_t = std::function< bool(int depth, parse_event_t event, basic_json &parsed)> |
per-element parser callback type More... | |
Static Public Member Functions | |
static allocator_type | get_allocator () |
returns the allocator associated with the container More... | |
Private Types | |
using | basic_json_t = basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType > |
workaround type for MSVC More... | |
Private Member Functions | |
template<class T , typename std::enable_if< std::is_convertible< typename object_t::key_type, typename T::key_type >::value and std::is_convertible< basic_json_t, typename T::mapped_type >::value, int >::type = 0> | |
T | get_impl (T *) const |
get an object (explicit) More... | |
object_t | get_impl (object_t *) const |
get an object (explicit) More... | |
template<class T , typename std::enable_if< std::is_convertible< basic_json_t, typename T::value_type >::value and not std::is_same< basic_json_t, typename T::value_type >::value and not std::is_arithmetic< T >::value and not std::is_convertible< std::string, T >::value and not has_mapped_type< T >::value, int >::type = 0> | |
T | get_impl (T *) const |
get an array (explicit) More... | |
template<class T , typename std::enable_if< std::is_convertible< basic_json_t, T >::value and not std::is_same< basic_json_t, T >::value, int >::type = 0> | |
std::vector< T > | get_impl (std::vector< T > *) const |
get an array (explicit) More... | |
template<class T , typename std::enable_if< std::is_same< basic_json, typename T::value_type >::value and not has_mapped_type< T >::value, int >::type = 0> | |
T | get_impl (T *) const |
get an array (explicit) More... | |
array_t | get_impl (array_t *) const |
get an array (explicit) More... | |
template<typename T , typename std::enable_if< std::is_convertible< string_t, T >::value, int >::type = 0> | |
T | get_impl (T *) const |
get a string (explicit) More... | |
template<typename T , typename std::enable_if< std::is_arithmetic< T >::value, int >::type = 0> | |
T | get_impl (T *) const |
get a number (explicit) More... | |
constexpr boolean_t | get_impl (boolean_t *) const |
get a boolean (explicit) More... | |
object_t * | get_impl_ptr (object_t *) noexcept |
get a pointer to the value (object) More... | |
constexpr const object_t * | get_impl_ptr (const object_t *) const noexcept |
get a pointer to the value (object) More... | |
array_t * | get_impl_ptr (array_t *) noexcept |
get a pointer to the value (array) More... | |
constexpr const array_t * | get_impl_ptr (const array_t *) const noexcept |
get a pointer to the value (array) More... | |
string_t * | get_impl_ptr (string_t *) noexcept |
get a pointer to the value (string) More... | |
constexpr const string_t * | get_impl_ptr (const string_t *) const noexcept |
get a pointer to the value (string) More... | |
boolean_t * | get_impl_ptr (boolean_t *) noexcept |
get a pointer to the value (boolean) More... | |
constexpr const boolean_t * | get_impl_ptr (const boolean_t *) const noexcept |
get a pointer to the value (boolean) More... | |
number_integer_t * | get_impl_ptr (number_integer_t *) noexcept |
get a pointer to the value (integer number) More... | |
constexpr const number_integer_t * | get_impl_ptr (const number_integer_t *) const noexcept |
get a pointer to the value (integer number) More... | |
number_unsigned_t * | get_impl_ptr (number_unsigned_t *) noexcept |
get a pointer to the value (unsigned number) More... | |
constexpr const number_unsigned_t * | get_impl_ptr (const number_unsigned_t *) const noexcept |
get a pointer to the value (unsigned number) More... | |
number_float_t * | get_impl_ptr (number_float_t *) noexcept |
get a pointer to the value (floating-point number) More... | |
constexpr const number_float_t * | get_impl_ptr (const number_float_t *) const noexcept |
get a pointer to the value (floating-point number) More... | |
string_t | type_name () const noexcept |
return the type as string More... | |
void | dump (std::ostream &o, const bool pretty_print, const unsigned int indent_step, const unsigned int current_indent=0) const |
internal implementation of the serialization function More... | |
Static Private Member Functions | |
template<typename T , typename... Args> | |
static T * | create (Args &&... args) |
helper for exception-safe object creation More... | |
template<typename ReferenceType , typename ThisType > | |
static ReferenceType | get_ref_impl (ThisType &obj) |
helper function to implement get_ref() More... | |
static std::size_t | extra_space (const string_t &s) noexcept |
calculates the extra space to escape a JSON string More... | |
static string_t | escape_string (const string_t &s) |
escape a string More... | |
Private Attributes | |
value_t | m_type = value_t::null |
the type of the current element More... | |
json_value | m_value = {} |
the value of the current element More... | |
container types | |
using | value_type = basic_json |
the type of elements in a basic_json container More... | |
using | reference = value_type & |
the type of an element reference More... | |
using | const_reference = const value_type & |
the type of an element const reference More... | |
using | difference_type = std::ptrdiff_t |
a type to represent differences between iterators More... | |
using | size_type = std::size_t |
a type to represent container sizes More... | |
using | allocator_type = AllocatorType< basic_json > |
the allocator type More... | |
using | pointer = typename std::allocator_traits< allocator_type >::pointer |
the type of an element pointer More... | |
using | const_pointer = typename std::allocator_traits< allocator_type >::const_pointer |
the type of an element const pointer More... | |
using | reverse_iterator = json_reverse_iterator< typename basic_json::iterator > |
a reverse iterator for a basic_json container More... | |
using | const_reverse_iterator = json_reverse_iterator< typename basic_json::const_iterator > |
a const reverse iterator for a basic_json container More... | |
JSON value data types | |
using | object_t = ObjectType< StringType, basic_json, std::less< StringType >, AllocatorType< std::pair< const StringType, basic_json > >> |
a type for an object More... | |
using | array_t = ArrayType< basic_json, AllocatorType< basic_json > > |
a type for an array More... | |
using | string_t = StringType |
a type for a string More... | |
using | boolean_t = BooleanType |
a type for a boolean More... | |
using | number_integer_t = NumberIntegerType |
a type for a number (integer) More... | |
using | number_unsigned_t = NumberUnsignedType |
a type for a number (unsigned) More... | |
using | number_float_t = NumberFloatType |
a type for a number (floating-point) More... | |
constructors and destructors | |
static basic_json | array (std::initializer_list< basic_json > init=std::initializer_list< basic_json >()) |
explicitly create an array from an initializer list More... | |
static basic_json | object (std::initializer_list< basic_json > init=std::initializer_list< basic_json >()) |
explicitly create an object from an initializer list More... | |
basic_json (const value_t value_type) | |
create an empty value with a given type More... | |
basic_json ()=default | |
create a null object (implicitly) More... | |
basic_json (std::nullptr_t) noexcept | |
create a null object (explicitly) More... | |
basic_json (const object_t &val) | |
create an object (explicit) More... | |
template<class CompatibleObjectType , typename std::enable_if< std::is_constructible< typename object_t::key_type, typename CompatibleObjectType::key_type >::value and std::is_constructible< basic_json, typename CompatibleObjectType::mapped_type >::value, int >::type = 0> | |
basic_json (const CompatibleObjectType &val) | |
create an object (implicit) More... | |
basic_json (const array_t &val) | |
create an array (explicit) More... | |
template<class CompatibleArrayType , typename std::enable_if< not std::is_same< CompatibleArrayType, typename basic_json_t::iterator >::value and not std::is_same< CompatibleArrayType, typename basic_json_t::const_iterator >::value and not std::is_same< CompatibleArrayType, typename basic_json_t::reverse_iterator >::value and not std::is_same< CompatibleArrayType, typename basic_json_t::const_reverse_iterator >::value and not std::is_same< CompatibleArrayType, typename array_t::iterator >::value and not std::is_same< CompatibleArrayType, typename array_t::const_iterator >::value and std::is_constructible< basic_json, typename CompatibleArrayType::value_type >::value, int >::type = 0> | |
basic_json (const CompatibleArrayType &val) | |
create an array (implicit) More... | |
basic_json (const string_t &val) | |
create a string (explicit) More... | |
basic_json (const typename string_t::value_type *val) | |
create a string (explicit) More... | |
template<class CompatibleStringType , typename std::enable_if< std::is_constructible< string_t, CompatibleStringType >::value, int >::type = 0> | |
basic_json (const CompatibleStringType &val) | |
create a string (implicit) More... | |
basic_json (boolean_t val) noexcept | |
create a boolean (explicit) More... | |
template<typename T , typename std::enable_if< not(std::is_same< T, int >::value) and std::is_same< T, number_integer_t >::value, int >::type = 0> | |
basic_json (const number_integer_t val) noexcept | |
create an integer number (explicit) More... | |
basic_json (const int val) noexcept | |
create an integer number from an enum type (explicit) More... | |
template<typename CompatibleNumberIntegerType , typename std::enable_if< std::is_constructible< number_integer_t, CompatibleNumberIntegerType >::value and std::numeric_limits< CompatibleNumberIntegerType >::is_integer and std::numeric_limits< CompatibleNumberIntegerType >::is_signed, CompatibleNumberIntegerType >::type = 0> | |
basic_json (const CompatibleNumberIntegerType val) noexcept | |
create an integer number (implicit) More... | |
template<typename T , typename std::enable_if< not(std::is_same< T, int >::value) and std::is_same< T, number_unsigned_t >::value, int >::type = 0> | |
basic_json (const number_unsigned_t val) noexcept | |
create an unsigned integer number (explicit) More... | |
template<typename CompatibleNumberUnsignedType , typename std::enable_if< std::is_constructible< number_unsigned_t, CompatibleNumberUnsignedType >::value and std::numeric_limits< CompatibleNumberUnsignedType >::is_integer and !std::numeric_limits< CompatibleNumberUnsignedType >::is_signed, CompatibleNumberUnsignedType >::type = 0> | |
basic_json (const CompatibleNumberUnsignedType val) noexcept | |
create an unsigned number (implicit) More... | |
basic_json (const number_float_t val) noexcept | |
create a floating-point number (explicit) More... | |
template<typename CompatibleNumberFloatType , typename = typename std::enable_if< std::is_constructible<number_float_t, CompatibleNumberFloatType>::value and std::is_floating_point<CompatibleNumberFloatType>::value>::type> | |
basic_json (const CompatibleNumberFloatType val) noexcept | |
create an floating-point number (implicit) More... | |
basic_json (std::initializer_list< basic_json > init, bool type_deduction=true, value_t manual_type=value_t::array) | |
create a container (array or object) from an initializer list More... | |
basic_json (size_type cnt, const basic_json &val) | |
construct an array with count copies of given value More... | |
template<class InputIT , typename std::enable_if< std::is_same< InputIT, typename basic_json_t::iterator >::value or std::is_same< InputIT, typename basic_json_t::const_iterator >::value, int >::type = 0> | |
basic_json (InputIT first, InputIT last) | |
construct a JSON container given an iterator range More... | |
basic_json (std::istream &i, parser_callback_t cb=nullptr) | |
construct a JSON value given an input stream More... | |
basic_json (const basic_json &other) | |
copy constructor More... | |
basic_json (basic_json &&other) noexcept | |
move constructor More... | |
reference & | operator= (basic_json other) noexcept(std::is_nothrow_move_constructible< value_t >::value and std::is_nothrow_move_assignable< value_t >::value and std::is_nothrow_move_constructible< json_value >::value and std::is_nothrow_move_assignable< json_value >::value) |
copy assignment More... | |
~basic_json () | |
destructor More... | |
object inspection | |
string_t | dump (const int indent=-1) const |
serialization More... | |
constexpr value_t | type () const noexcept |
return the type of the JSON value (explicit) More... | |
constexpr bool | is_primitive () const noexcept |
return whether type is primitive More... | |
constexpr bool | is_structured () const noexcept |
return whether type is structured More... | |
constexpr bool | is_null () const noexcept |
return whether value is null More... | |
constexpr bool | is_boolean () const noexcept |
return whether value is a boolean More... | |
constexpr bool | is_number () const noexcept |
return whether value is a number More... | |
constexpr bool | is_number_integer () const noexcept |
return whether value is an integer number More... | |
constexpr bool | is_number_unsigned () const noexcept |
return whether value is an unsigned integer number More... | |
constexpr bool | is_number_float () const noexcept |
return whether value is a floating-point number More... | |
constexpr bool | is_object () const noexcept |
return whether value is an object More... | |
constexpr bool | is_array () const noexcept |
return whether value is an array More... | |
constexpr bool | is_string () const noexcept |
return whether value is a string More... | |
constexpr bool | is_discarded () const noexcept |
return whether value is discarded More... | |
constexpr | operator value_t () const noexcept |
return the type of the JSON value (implicit) More... | |
value access | |
template<typename ValueType , typename std::enable_if< not std::is_pointer< ValueType >::value, int >::type = 0> | |
ValueType | get () const |
get a value (explicit) More... | |
template<typename PointerType , typename std::enable_if< std::is_pointer< PointerType >::value, int >::type = 0> | |
PointerType | get () noexcept |
get a pointer value (explicit) More... | |
template<typename PointerType , typename std::enable_if< std::is_pointer< PointerType >::value, int >::type = 0> | |
constexpr const PointerType | get () const noexcept |
get a pointer value (explicit) More... | |
template<typename PointerType , typename std::enable_if< std::is_pointer< PointerType >::value, int >::type = 0> | |
PointerType | get_ptr () noexcept |
get a pointer value (implicit) More... | |
template<typename PointerType , typename std::enable_if< std::is_pointer< PointerType >::value and std::is_const< typename std::remove_pointer< PointerType >::type >::value, int >::type = 0> | |
constexpr const PointerType | get_ptr () const noexcept |
get a pointer value (implicit) More... | |
template<typename ReferenceType , typename std::enable_if< std::is_reference< ReferenceType >::value, int >::type = 0> | |
ReferenceType | get_ref () |
get a reference value (implicit) More... | |
template<typename ReferenceType , typename std::enable_if< std::is_reference< ReferenceType >::value and std::is_const< typename std::remove_reference< ReferenceType >::type >::value, int >::type = 0> | |
ReferenceType | get_ref () const |
get a reference value (implicit) More... | |
template<typename ValueType , typename std::enable_if< not std::is_pointer< ValueType >::value and not std::is_same< ValueType, typename string_t::value_type >::value and not std::is_same< ValueType, std::initializer_list< typename string_t::value_type >>::value, int >::type = 0> | |
operator ValueType () const | |
get a value (implicit) More... | |
element access | |
reference | at (size_type idx) |
access specified array element with bounds checking More... | |
const_reference | at (size_type idx) const |
access specified array element with bounds checking More... | |
reference | at (const typename object_t::key_type &key) |
access specified object element with bounds checking More... | |
const_reference | at (const typename object_t::key_type &key) const |
access specified object element with bounds checking More... | |
reference | operator[] (size_type idx) |
access specified array element More... | |
const_reference | operator[] (size_type idx) const |
access specified array element More... | |
reference | operator[] (const typename object_t::key_type &key) |
access specified object element More... | |
const_reference | operator[] (const typename object_t::key_type &key) const |
read-only access specified object element More... | |
template<typename T , std::size_t n> | |
reference | operator[] (T *(&key)[n]) |
access specified object element More... | |
template<typename T , std::size_t n> | |
const_reference | operator[] (T *(&key)[n]) const |
read-only access specified object element More... | |
template<typename T > | |
reference | operator[] (T *key) |
access specified object element More... | |
template<typename T > | |
const_reference | operator[] (T *key) const |
read-only access specified object element More... | |
template<class ValueType , typename std::enable_if< std::is_convertible< basic_json_t, ValueType >::value, int >::type = 0> | |
ValueType | value (const typename object_t::key_type &key, ValueType default_value) const |
access specified object element with default value More... | |
string_t | value (const typename object_t::key_type &key, const char *default_value) const |
overload for a default value of type const char* More... | |
reference | front () |
access the first element More... | |
const_reference | front () const |
access the first element More... | |
reference | back () |
access the last element More... | |
const_reference | back () const |
access the last element More... | |
template<class InteratorType , typename std::enable_if< std::is_same< InteratorType, typename basic_json_t::iterator >::value or std::is_same< InteratorType, typename basic_json_t::const_iterator >::value, int >::type = 0> | |
InteratorType | erase (InteratorType pos) |
remove element given an iterator More... | |
template<class InteratorType , typename std::enable_if< std::is_same< InteratorType, typename basic_json_t::iterator >::value or std::is_same< InteratorType, typename basic_json_t::const_iterator >::value, int >::type = 0> | |
InteratorType | erase (InteratorType first, InteratorType last) |
remove elements given an iterator range More... | |
size_type | erase (const typename object_t::key_type &key) |
remove element from a JSON object given a key More... | |
void | erase (const size_type idx) |
remove element from a JSON array given an index More... | |
lookup | |
iterator | find (typename object_t::key_type key) |
find an element in a JSON object More... | |
const_iterator | find (typename object_t::key_type key) const |
find an element in a JSON object More... | |
size_type | count (typename object_t::key_type key) const |
returns the number of occurrences of a key in a JSON object More... | |
iterators | |
static iteration_proxy< iterator > | iterator_wrapper (reference cont) |
wrapper to access iterator member functions in range-based for More... | |
static iteration_proxy< const_iterator > | iterator_wrapper (const_reference cont) |
wrapper to access iterator member functions in range-based for More... | |
iterator | begin () noexcept |
returns an iterator to the first element More... | |
const_iterator | begin () const noexcept |
returns a const iterator to the first element More... | |
const_iterator | cbegin () const noexcept |
returns a const iterator to the first element More... | |
iterator | end () noexcept |
returns an iterator to one past the last element More... | |
const_iterator | end () const noexcept |
returns a const iterator to one past the last element More... | |
const_iterator | cend () const noexcept |
returns a const iterator to one past the last element More... | |
reverse_iterator | rbegin () noexcept |
returns an iterator to the reverse-beginning More... | |
const_reverse_iterator | rbegin () const noexcept |
returns a const reverse iterator to the last element More... | |
reverse_iterator | rend () noexcept |
returns an iterator to the reverse-end More... | |
const_reverse_iterator | rend () const noexcept |
returns a const reverse iterator to one before the first More... | |
const_reverse_iterator | crbegin () const noexcept |
returns a const reverse iterator to the last element More... | |
const_reverse_iterator | crend () const noexcept |
returns a const reverse iterator to one before the first More... | |
capacity | |
bool | empty () const noexcept |
checks whether the container is empty More... | |
size_type | size () const noexcept |
returns the number of elements More... | |
size_type | max_size () const noexcept |
returns the maximum possible number of elements More... | |
modifiers | |
void | clear () noexcept |
clears the contents More... | |
void | push_back (basic_json &&val) |
add an object to an array More... | |
reference | operator+= (basic_json &&val) |
add an object to an array More... | |
void | push_back (const basic_json &val) |
add an object to an array More... | |
reference | operator+= (const basic_json &val) |
add an object to an array More... | |
void | push_back (const typename object_t::value_type &val) |
add an object to an object More... | |
reference | operator+= (const typename object_t::value_type &val) |
add an object to an object More... | |
iterator | insert (const_iterator pos, const basic_json &val) |
inserts element More... | |
iterator | insert (const_iterator pos, basic_json &&val) |
inserts element More... | |
iterator | insert (const_iterator pos, size_type cnt, const basic_json &val) |
inserts elements More... | |
iterator | insert (const_iterator pos, const_iterator first, const_iterator last) |
inserts elements More... | |
iterator | insert (const_iterator pos, std::initializer_list< basic_json > ilist) |
inserts elements More... | |
void | swap (reference other) noexcept(std::is_nothrow_move_constructible< value_t >::value and std::is_nothrow_move_assignable< value_t >::value and std::is_nothrow_move_constructible< json_value >::value and std::is_nothrow_move_assignable< json_value >::value) |
exchanges the values More... | |
void | swap (array_t &other) |
exchanges the values More... | |
void | swap (object_t &other) |
exchanges the values More... | |
void | swap (string_t &other) |
exchanges the values More... | |
lexicographical comparison operators | |
bool | operator< (const value_t lhs, const value_t rhs) noexcept |
comparison operator for JSON types More... | |
bool | operator== (const_reference lhs, const_reference rhs) noexcept |
comparison: equal More... | |
bool | operator== (const_reference v, std::nullptr_t) noexcept |
comparison: equal More... | |
bool | operator== (std::nullptr_t, const_reference v) noexcept |
comparison: equal More... | |
bool | operator!= (const_reference lhs, const_reference rhs) noexcept |
comparison: not equal More... | |
bool | operator!= (const_reference v, std::nullptr_t) noexcept |
comparison: not equal More... | |
bool | operator!= (std::nullptr_t, const_reference v) noexcept |
comparison: not equal More... | |
bool | operator< (const_reference lhs, const_reference rhs) noexcept |
comparison: less than More... | |
bool | operator<= (const_reference lhs, const_reference rhs) noexcept |
comparison: less than or equal More... | |
bool | operator> (const_reference lhs, const_reference rhs) noexcept |
comparison: greater than More... | |
bool | operator>= (const_reference lhs, const_reference rhs) noexcept |
comparison: greater than or equal More... | |
serialization | |
std::ostream & | operator<< (std::ostream &o, const basic_json &j) |
serialize to stream More... | |
std::ostream & | operator>> (const basic_json &j, std::ostream &o) |
serialize to stream More... | |
deserialization | |
static basic_json | parse (const string_t &s, parser_callback_t cb=nullptr) |
deserialize from string More... | |
static basic_json | parse (std::istream &i, parser_callback_t cb=nullptr) |
deserialize from stream More... | |
static basic_json | parse (std::istream &&i, parser_callback_t cb=nullptr) |
deserialize from stream More... | |
std::istream & | operator<< (basic_json &j, std::istream &i) |
deserialize from stream More... | |
std::istream & | operator>> (std::istream &i, basic_json &j) |
deserialize from stream More... | |
a class to store JSON values
ObjectType | type for JSON objects (std::map by default; will be used in object_t) |
ArrayType | type for JSON arrays (std::vector by default; will be used in array_t) |
StringType | type for JSON strings and object keys (std::string by default; will be used in string_t) |
BooleanType | type for JSON booleans (bool by default; will be used in boolean_t) |
NumberIntegerType | type for JSON integer numbers (int64_t by default; will be used in number_integer_t) |
NumberUnsignedType | type for JSON unsigned integer numbers ( by default; will be used in number_unsigned_t) |
NumberFloatType | type for JSON floating-point numbers (double by default; will be used in number_float_t) |
AllocatorType | type of the allocator to use (std::allocator by default) |
@requirement The class satisfies the following concept requirements:
==
, see operator==(const_reference,const_reference).<
, see operator<(const_reference,const_reference).std::nullptr_t
objects which are used to model the null
value.using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::allocator_type = AllocatorType<basic_json> |
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::array_t = ArrayType<basic_json, AllocatorType<basic_json> > |
a type for an array
RFC 7159 describes JSON arrays as follows:
An array is an ordered sequence of zero or more values.
To store objects in C++, a type is defined by the template parameters explained below.
ArrayType | container type to store arrays (e.g., std::vector or std::list ) |
AllocatorType | allocator to use for arrays (e.g., std::allocator ) |
With the default values for ArrayType (std::vector
) and AllocatorType (std::allocator
), the default value for array_t is:
RFC 7159 specifies:
An implementation may set limits on the maximum depth of nesting.
In this class, the array's limit of nesting is not constraint explicitly. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.
Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t*
must be dereferenced.
|
private |
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::boolean_t = BooleanType |
a type for a boolean
RFC 7159 implicitly describes a boolean as a type which differentiates the two literals true
and false
.
To store objects in C++, a type is defined by the template parameter BooleanType which chooses the type to use.
With the default values for BooleanType (bool
), the default value for boolean_t is:
Boolean values are stored directly inside a basic_json type.
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::const_pointer = typename std::allocator_traits<allocator_type>::const_pointer |
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::const_reference = const value_type& |
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::const_reverse_iterator = json_reverse_iterator<typename basic_json::const_iterator> |
a const reverse iterator for a basic_json container
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::difference_type = std::ptrdiff_t |
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::number_float_t = NumberFloatType |
a type for a number (floating-point)
RFC 7159 describes numbers as follows:
The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.
This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.
To store floating-point numbers in C++, a type is defined by the template parameter NumberFloatType which chooses the type to use.
With the default values for NumberFloatType (double
), the default value for number_float_t is:
01.2
will be serialized to 1.2
. During deserialization, leading zeros yield an error.null
.RFC 7159 states:
This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.
This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308
and values greater than 1.79769313486232e+308
will be stored as NaN internally and be serialized to null
.
Floating-point number values are stored directly inside a basic_json type.
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::number_integer_t = NumberIntegerType |
a type for a number (integer)
RFC 7159 describes numbers as follows:
The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.
This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.
To store integer numbers in C++, a type is defined by the template parameter NumberIntegerType which chooses the type to use.
With the default values for NumberIntegerType (int64_t
), the default value for number_integer_t is:
010
will be serialized to 8
. During deserialization, leading zeros yield an error.null
.RFC 7159 specifies:
An implementation may set limits on the range and precision of numbers.
When the default type is used, the maximal integer number that can be stored is 9223372036854775807
(INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808
(INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.
RFC 7159 further states:
Note that when such software is used, numbers that are integers and are in the range are interoperable in the sense that implementations will agree exactly on their numeric values.
As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.
Integer number values are stored directly inside a basic_json type.
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::number_unsigned_t = NumberUnsignedType |
a type for a number (unsigned)
RFC 7159 describes numbers as follows:
The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.
This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.
To store unsigned integer numbers in C++, a type is defined by the template parameter NumberUnsignedType which chooses the type to use.
With the default values for NumberUnsignedType (uint64_t
), the default value for number_unsigned_t is:
010
will be serialized to 8
. During deserialization, leading zeros yield an error.null
.RFC 7159 specifies:
An implementation may set limits on the range and precision of numbers.
When the default type is used, the maximal integer number that can be stored is 18446744073709551615
(UINT64_MAX) and the minimal integer number that can be stored is 0
. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.
RFC 7159 further states:
Note that when such software is used, numbers that are integers and are in the range are interoperable in the sense that implementations will agree exactly on their numeric values.
As this range is a subrange (when considered in conjunction with the number_integer_t type) of the exactly supported range [0, UINT64_MAX], this class's integer type is interoperable.
Integer number values are stored directly inside a basic_json type.
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::object_t = ObjectType<StringType, basic_json, std::less<StringType>, AllocatorType<std::pair<const StringType, basic_json> >> |
a type for an object
RFC 7159 describes JSON objects as follows:
An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.
To store objects in C++, a type is defined by the template parameters described below.
ObjectType | the container to store objects (e.g., std::map or std::unordered_map ) |
StringType | the type of the keys or names (e.g., std::string ). The comparison function std::less<StringType> is used to order elements inside the container. |
AllocatorType | the allocator to use for objects (e.g., std::allocator ) |
With the default values for ObjectType (std::map
), StringType (std::string
), and AllocatorType (std::allocator
), the default value for object_t is:
The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:
{"key": 1}
and {"key": 2, "key": 1}
will be treated as equal and both stored as {"key": 1}
.{"b": 1, "a": 2}
and {"a": 2, "b": 1}
will be stored and serialized as {"a": 2, "b": 1}
.{"b": 1, "a": 2}
and {"a": 2, "b": 1}
will be treated as equal.RFC 7159 specifies:
An implementation may set limits on the maximum depth of nesting.
In this class, the object's limit of nesting is not constraint explicitly. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.
Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t*
must be dereferenced.
std::map
with std::less
is used by default. Please note this behavior conforms to RFC 7159, because any order implements the specified "unordered" nature of JSON objects. using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::parser_callback_t = std::function<bool(int depth, parse_event_t event, basic_json& parsed)> |
per-element parser callback type
With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse(std::istream&, parser_callback_t) or parse(const string_t&, parser_callback_t), it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.
We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.
parameter event | description | parameter depth | parameter parsed |
---|---|---|---|
parse_event_t::object_start | the parser read { and started to process a JSON object | depth of the parent of the JSON object | a JSON value with type discarded |
parse_event_t::key | the parser read a key of a value in an object | depth of the currently parsed JSON object | a JSON string containing the key |
parse_event_t::object_end | the parser read } and finished processing a JSON object | depth of the parent of the JSON object | the parsed JSON object |
parse_event_t::array_start | the parser read [ and started to process a JSON array | depth of the parent of the JSON array | a JSON value with type discarded |
parse_event_t::array_end | the parser read ] and finished processing a JSON array | depth of the parent of the JSON array | the parsed JSON array |
parse_event_t::value | the parser finished reading a JSON value | depth of the value | the parsed JSON value |
Discarding a value (i.e., returning false
) has different effects depending on the context in which function was called:
null
. This case happens if the top-level element is skipped.[in] | depth | the depth of the recursion during parsing |
[in] | event | an event of type parse_event_t indicating the context in the callback function has been called |
[in,out] | parsed | the current intermediate parse result; note that writing to this value has no effect for parse_event_t::key events |
true
) or not (false
). In the latter case, it is either skipped completely or replaced by an empty discarded object.using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::pointer = typename std::allocator_traits<allocator_type>::pointer |
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::reference = value_type& |
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::reverse_iterator = json_reverse_iterator<typename basic_json::iterator> |
a reverse iterator for a basic_json container
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::size_type = std::size_t |
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::string_t = StringType |
a type for a string
RFC 7159 describes JSON strings as follows:
A string is a sequence of zero or more Unicode characters.
To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the JSON class into byte-sized characters during deserialization.
StringType | the container to store strings (e.g., std::string ). Note this container is used for keys/names in objects, see object_t. |
With the default values for StringType (std::string
), the default value for string_t is:
RFC 7159 states:
Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that
"a\\b"
and"a\u005Cb"
are not equal.
This implementation is interoperable as it does compare strings code unit by code unit.
String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t*
must be dereferenced.
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >::value_type = basic_json |
the type of elements in a basic_json container
|
strong |
JSON callback events.
This enumeration lists the parser events that can trigger calling a callback function of type parser_callback_t during parsing.
|
strong |
the JSON type enumeration
This enumeration collects the different JSON types. It is internally used to distinguish the stored values, and the functions is_null(), is_object(), is_array(), is_string(), is_boolean(), is_number(), and is_discarded() rely on it.
|
inline |
create an empty value with a given type
Create an empty JSON value with a given type. The value will be default initialized with an empty value which depends on the type:
Value type | initial value |
---|---|
null | null |
boolean | false |
string | "" |
number | 0 |
object | {} |
array | [] |
[in] | value_type | the type of the value to create |
@complexity Constant.
std::bad_alloc | if allocation for object, array, or string value fails |
@liveexample{The following code shows the constructor for different value_t values,basic_json__value_t}
null
value
|
default |
create a null object (implicitly)
Create a null
JSON value. This is the implicit version of the null
value constructor as it takes no parameters.
@complexity Constant.
@exceptionsafety No-throw guarantee: this constructor never throws exceptions.
@requirement This function helps basic_json
satisfying the Container requirements:
basic_json().empty() == true
.@liveexample{The following code shows the constructor for a null
JSON value.,basic_json}
null
value
|
inlinenoexcept |
create a null object (explicitly)
Create a null
JSON value. This is the explicitly version of the null
value constructor as it takes a null pointer as parameter. It allows to create null
values by explicitly assigning a nullptr
to a JSON value. The passed null pointer itself is not read – it is only used to choose the right constructor.
@complexity Constant.
@exceptionsafety No-throw guarantee: this constructor never throws exceptions.
@liveexample{The following code shows the constructor with null pointer parameter.,basic_json__nullptr_t}
null
value)
|
inline |
create an object (explicit)
Create an object JSON value with a given content.
[in] | val | a value for the object |
@complexity Linear in the size of the passed val.
std::bad_alloc | if allocation for object value fails |
@liveexample{The following code shows the constructor with an object_t parameter.,basic_json__object_t}
|
inline |
create an object (implicit)
Create an object JSON value with a given content. This constructor allows any type CompatibleObjectType that can be used to construct values of type object_t.
CompatibleObjectType | An object type whose key_type and value_type is compatible to object_t. Examples include std::map , std::unordered_map , std::multimap , and std::unordered_multimap with a key_type of std::string , and a value_type from which a basic_json value can be constructed. |
[in] | val | a value for the object |
@complexity Linear in the size of the passed val.
std::bad_alloc | if allocation for object value fails |
@liveexample{The following code shows the constructor with several compatible object type parameters.,basic_json__CompatibleObjectType}
|
inline |
create an array (explicit)
Create an array JSON value with a given content.
[in] | val | a value for the array |
@complexity Linear in the size of the passed val.
std::bad_alloc | if allocation for array value fails |
@liveexample{The following code shows the constructor with an array_t parameter.,basic_json__array_t}
|
inline |
create an array (implicit)
Create an array JSON value with a given content. This constructor allows any type CompatibleArrayType that can be used to construct values of type array_t.
CompatibleArrayType | An object type whose value_type is compatible to array_t. Examples include std::vector , std::deque , std::list , std::forward_list , std::array , std::set , std::unordered_set , std::multiset , and unordered_multiset with a value_type from which a basic_json value can be constructed. |
[in] | val | a value for the array |
@complexity Linear in the size of the passed val.
std::bad_alloc | if allocation for array value fails |
@liveexample{The following code shows the constructor with several compatible array type parameters.,basic_json__CompatibleArrayType}
|
inline |
create a string (explicit)
Create an string JSON value with a given content.
[in] | val | a value for the string |
@complexity Linear in the size of the passed val.
std::bad_alloc | if allocation for string value fails |
@liveexample{The following code shows the constructor with an string_t parameter.,basic_json__string_t}
|
inline |
create a string (explicit)
Create a string JSON value with a given content.
[in] | val | a literal value for the string |
@complexity Linear in the size of the passed val.
std::bad_alloc | if allocation for string value fails |
@liveexample{The following code shows the constructor with string literal parameter.,basic_json__string_t_value_type}
|
inline |
create a string (implicit)
Create a string JSON value with a given content.
[in] | val | a value for the string |
CompatibleStringType | an string type which is compatible to string_t, for instance std::string . |
@complexity Linear in the size of the passed val.
std::bad_alloc | if allocation for string value fails |
@liveexample{The following code shows the construction of a string value from a compatible type.,basic_json__CompatibleStringType}
|
inlinenoexcept |
|
inlinenoexcept |
create an integer number (explicit)
Create an integer number JSON value with a given content.
T | A helper type to remove this function via SFINAE in case number_integer_t is the same as int . In this case, this constructor would have the same signature as basic_json(const int value). Note the helper type T is not visible in this constructor's interface. |
[in] | val | an integer to create a JSON number from |
@complexity Constant.
@liveexample{The example below shows the construction of an integer number value.,basic_json__number_integer_t}
|
inlinenoexcept |
create an integer number from an enum type (explicit)
Create an integer number JSON value with a given content.
[in] | val | an integer to create a JSON number from |
@complexity Constant.
@liveexample{The example below shows the construction of an integer number value from an anonymous enum.,basic_json__const_int}
|
inlinenoexcept |
create an integer number (implicit)
Create an integer number JSON value with a given content. This constructor allows any type CompatibleNumberIntegerType that can be used to construct values of type number_integer_t.
CompatibleNumberIntegerType | An integer type which is compatible to number_integer_t. Examples include the types int , int32_t , long , and short . |
[in] | val | an integer to create a JSON number from |
@complexity Constant.
@liveexample{The example below shows the construction of several integer number values from compatible types.,basic_json__CompatibleIntegerNumberType}
|
inlinenoexcept |
create an unsigned integer number (explicit)
Create an unsigned integer number JSON value with a given content.
T | helper type to compare number_unsigned_t and unsigned int (not visible in) the interface. |
[in] | val | an integer to create a JSON number from |
@complexity Constant.
|
inlinenoexcept |
create an unsigned number (implicit)
Create an unsigned number JSON value with a given content. This constructor allows any type CompatibleNumberUnsignedType that can be used to construct values of type number_unsigned_t.
CompatibleNumberUnsignedType | An integer type which is compatible to number_unsigned_t. Examples may include the types unsigned int , uint32_t , or unsigned short . |
[in] | val | an unsigned integer to create a JSON number from |
@complexity Constant.
|
inlinenoexcept |
create a floating-point number (explicit)
Create a floating-point number JSON value with a given content.
[in] | val | a floating-point value to create a JSON number from |
In case the parameter val is not a number, a JSON null value is created instead.Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.
@complexity Constant.
@liveexample{The following example creates several floating-point values.,basic_json__number_float_t}
|
inlinenoexcept |
create an floating-point number (implicit)
Create an floating-point number JSON value with a given content. This constructor allows any type CompatibleNumberFloatType that can be used to construct values of type number_float_t.
CompatibleNumberFloatType | A floating-point type which is compatible to number_float_t. Examples may include the types float or double . |
[in] | val | a floating-point to create a JSON number from |
In case the parameter val is not a number, a JSON null value is created instead.Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.
@complexity Constant.
@liveexample{The example below shows the construction of several floating-point number values from compatible types.,basic_json__CompatibleNumberFloatType}
|
inline |
create a container (array or object) from an initializer list
Creates a JSON value of type array or object from the passed initializer list init. In case type_deduction is true
(default), the type of the JSON value to be created is deducted from the initializer list init according to the following rules:
{}
is created.The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows:
{}
which is exactly an empty JSON object.With the rules described above, the following JSON values cannot be expressed by an initializer list:
[]
): use array(std::initializer_list<basic_json>) with an empty initializer list in this case[in] | init | initializer list with JSON values |
[in] | type_deduction | internal parameter; when set to true , the type of the JSON value is deducted from the initializer list init; when set to false , the type provided via manual_type is forced. This mode is used by the functions array(std::initializer_list<basic_json>) and object(std::initializer_list<basic_json>). |
[in] | manual_type | internal parameter; when type_deduction is set to false , the created JSON value will use the provided type (only value_t::array and value_t::object are valid); when type_deduction is set to true , this parameter has no effect |
std::domain_error | if type_deduction is false , manual_type is value_t::object , but init contains an element which is not a pair whose first element is a string; example: "cannot create object from
initializer list" |
@complexity Linear in the size of the initializer list init.
@liveexample{The example below shows how JSON values are created from initializer lists.,basic_json__list_init_t}
|
inline |
construct an array with count copies of given value
Constructs a JSON array value by creating cnt copies of a passed value. In case cnt is 0
, an empty array is created. As postcondition, std::distance(begin(),end()) == cnt
holds.
[in] | cnt | the number of JSON copies of val to create |
[in] | val | the JSON value to copy |
@complexity Linear in cnt.
@liveexample{The following code shows examples for the basic_json(size_type\, const basic_json&) constructor.,basic_json__size_type_basic_json}
|
inline |
construct a JSON container given an iterator range
Constructs the JSON value with the contents of the range [first, last)
. The semantics depends on the different types a JSON value can have:
begin()
and last must be end()
. In this case, the value is copied. Otherwise, std::out_of_range is thrown.std::vector
.InputIT | an input iterator type (iterator or const_iterator) |
[in] | first | begin of the range to copy from (included) |
[in] | last | end of the range to copy from (excluded) |
std::domain_error | if iterators are not compatible; that is, do not belong to the same JSON value; example: "iterators are not compatible" |
std::out_of_range | if iterators are for a primitive type (number, boolean, or string) where an out of range error can be detected easily; example: "iterators out of range" |
std::bad_alloc | if allocation for object, array, or string fails |
std::domain_error | if called with a null value; example: "cannot use
construct with iterators from null" |
@complexity Linear in distance between first and last.
@liveexample{The example below shows several ways to create JSON values by specifying a subrange with iterators.,basic_json__InputIt_InputIt}
|
inlineexplicit |
construct a JSON value given an input stream
[in,out] | i | stream to read a serialized JSON value from |
[in] | cb | a parser callback function of type parser_callback_t which is used to control the deserialization by filtering unwanted values (optional) |
@complexity Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function cb has a super-linear complexity.
@liveexample{The example below demonstrates constructing a JSON value from a std::stringstream
with and without callback function.,basic_json__istream}
|
inline |
copy constructor
Creates a copy of a given JSON value.
[in] | other | the JSON value to copy |
@complexity Linear in the size of other.
@requirement This function helps basic_json
satisfying the Container requirements:
other == basic_json(other)
.std::bad_alloc | if allocation for object, array, or string fails. |
@liveexample{The following code shows an example for the copy constructor.,basic_json__basic_json}
|
inlinenoexcept |
move constructor
Move constructor. Constructs a JSON value with the contents of the given value other using move semantics. It "steals" the resources from other and leaves it as JSON null value.
[in,out] | other | value to move to this object |
@complexity Constant.
@liveexample{The code below shows the move constructor explicitly called via std::move.,basic_json__moveconstructor}
|
inline |
destructor
Destroys the JSON value and frees all allocated memory.
@complexity Linear.
@requirement This function helps basic_json
satisfying the Container requirements:
|
inlinestatic |
explicitly create an array from an initializer list
Creates a JSON array value from a given initializer list. That is, given a list of values a, b, c
, creates the JSON value [a, b, c]
. If the initializer list is empty, the empty array []
is created.
[in] | init | initializer list with JSON values to create an array from (optional) |
@complexity Linear in the size of init.
@liveexample{The following code shows an example for the array
function.,array}
|
inline |
access specified object element with bounds checking
Returns a reference to the element at with specified key key, with bounds checking.
[in] | key | key of the element to access |
std::domain_error | if the JSON value is not an object; example: "cannot use at() with boolean" |
std::out_of_range | if the key key is is not stored in the object; that is, find(key) == end() ; example: "key "the fast" not found" |
@complexity Logarithmic in the size of the container.
@liveexample{The example below shows how object elements can be read and written using at()
.,at__object_t_key_type}
|
inline |
access specified object element with bounds checking
Returns a const reference to the element at with specified key key, with bounds checking.
[in] | key | key of the element to access |
std::domain_error | if the JSON value is not an object; example: "cannot use at() with boolean" |
std::out_of_range | if the key key is is not stored in the object; that is, find(key) == end() ; example: "key "the fast" not found" |
@complexity Logarithmic in the size of the container.
@liveexample{The example below shows how object elements can be read using at()
.,at__object_t_key_type_const}
|
inline |
access specified array element with bounds checking
Returns a reference to the element at specified location idx, with bounds checking.
[in] | idx | index of the element to access |
std::domain_error | if the JSON value is not an array; example: "cannot use at() with string" |
std::out_of_range | if the index idx is out of range of the array; that is, idx >= size() ; example: "array index 7 is out of range" |
@complexity Constant.
@liveexample{The example below shows how array elements can be read and written using at()
.,at__size_type}
|
inline |
access specified array element with bounds checking
Returns a const reference to the element at specified location idx, with bounds checking.
[in] | idx | index of the element to access |
std::domain_error | if the JSON value is not an array; example: "cannot use at() with string" |
std::out_of_range | if the index idx is out of range of the array; that is, idx >= size() ; example: "array index 7 is out of range" |
@complexity Constant.
@liveexample{The example below shows how array elements can be read using at()
.,at__size_type_const}
|
inline |
access the last element
Returns a reference to the last element in the container. For a JSON container c
, the expression c.back()
is equivalent to
@complexity Constant.
null
(would throw std::out_of_range
) or an empty array or object (undefined behavior, guarded by assertions). std::out_of_range | when called on null value. |
@liveexample{The following code shows an example for back()
.,back}
|
inline |
access the last element
Returns a reference to the last element in the container. For a JSON container c
, the expression c.back()
is equivalent to
@complexity Constant.
null
(would throw std::out_of_range
) or an empty array or object (undefined behavior, guarded by assertions). std::out_of_range | when called on null value. |
@liveexample{The following code shows an example for back()
.,back}
|
inlinenoexcept |
returns a const iterator to the first element
Returns a const iterator to the first element.
@complexity Constant.
@requirement This function helps basic_json
satisfying the Container requirements:
const_cast<const basic_json&>(*this).begin()
.@liveexample{The following code shows an example for cbegin()
.,cbegin}
|
inlinenoexcept |
returns an iterator to the first element
Returns an iterator to the first element.
@complexity Constant.
@requirement This function helps basic_json
satisfying the Container requirements:
@liveexample{The following code shows an example for begin()
.,begin}
Definition at line 4101 of file json.hpp.
|
inlinenoexcept |
returns a const iterator to the first element
Returns a const iterator to the first element.
@complexity Constant.
@requirement This function helps basic_json
satisfying the Container requirements:
const_cast<const basic_json&>(*this).begin()
.@liveexample{The following code shows an example for cbegin()
.,cbegin}
Definition at line 4141 of file json.hpp.
|
inlinenoexcept |
returns a const iterator to one past the last element
Returns a const iterator to one past the last element.
@complexity Constant.
@requirement This function helps basic_json
satisfying the Container requirements:
const_cast<const basic_json&>(*this).end()
.@liveexample{The following code shows an example for cend()
.,cend}
Definition at line 4212 of file json.hpp.
|
inlinenoexcept |
clears the contents
Clears the content of a JSON value and resets it to the default value as if basic_json(value_t) would have been called:
Value type | initial value |
---|---|
null | null |
boolean | false |
string | "" |
number | 0 |
object | {} |
array | [] |
0.0
which will be serialized to 0
. The vale type remains number_float_t.@complexity Linear in the size of the JSON value.
@liveexample{The example below shows the effect of clear()
to different JSON types.,clear}
|
inline |
returns the number of occurrences of a key in a JSON object
Returns the number of elements with key key. If ObjectType is the default std::map
type, the return value will always be 0
(key was not found) or 1
(key was found).
[in] | key | key value of the element to count |
0
.@complexity Logarithmic in the size of the JSON object.
@liveexample{The example shows how count()
is used.,count}
|
inlinenoexcept |
returns a const reverse iterator to the last element
Returns a const iterator to the reverse-beginning; that is, the last element.
@complexity Constant.
@requirement This function helps basic_json
satisfying the ReversibleContainer requirements:
const_cast<const basic_json&>(*this).rbegin()
.@liveexample{The following code shows an example for crbegin()
.,crbegin}
Definition at line 4316 of file json.hpp.
|
inlinestaticprivate |
|
inlinenoexcept |
returns a const reverse iterator to one before the first
Returns a const reverse iterator to the reverse-end; that is, one before the first element.
@complexity Constant.
@requirement This function helps basic_json
satisfying the ReversibleContainer requirements:
const_cast<const basic_json&>(*this).rend()
.@liveexample{The following code shows an example for crend()
.,crend}
Definition at line 4345 of file json.hpp.
|
inline |
serialization
Serialization function for JSON values. The function tries to mimic Python's json.dumps()
function, and currently supports its indent
parameter.
[in] | indent | if indent is nonnegative, then array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. -1 (the default) selects the most compact representation |
@complexity Linear.
@liveexample{The following example shows the effect of different indent parameters to the result of the serialization.,dump}
Definition at line 2079 of file json.hpp.
|
inlineprivate |
internal implementation of the serialization function
This function is called by the public member function dump and organizes the serialization internally. The indentation level is propagated as additional parameter. In case of arrays and objects, the function is called recursively. Note that
escape_string()
operator<<
"%g"
format[out] | o | stream to write to |
[in] | pretty_print | whether the output shall be pretty-printed |
[in] | indent_step | the indent level |
[in] | current_indent | the current indent level (only used internally) |
|
inlinenoexcept |
checks whether the container is empty
Checks if a JSON value has no elements.
Value type | return value |
---|---|
null | true |
boolean | false |
string | false |
number | false |
object | result of function object_t::empty() |
array | result of function array_t::empty() |
@complexity Constant, as long as array_t and object_t satisfy the Container concept; that is, their empty()
functions have constant complexity.
@requirement This function helps basic_json
satisfying the Container requirements:
@liveexample{The following code uses empty()
to check if a JSON object contains any elements.,empty}
|
inlinenoexcept |
returns a const iterator to one past the last element
Returns a const iterator to one past the last element.
@complexity Constant.
@requirement This function helps basic_json
satisfying the Container requirements:
const_cast<const basic_json&>(*this).end()
.@liveexample{The following code shows an example for cend()
.,cend}
|
inlinenoexcept |
returns an iterator to one past the last element
Returns an iterator to one past the last element.
@complexity Constant.
@requirement This function helps basic_json
satisfying the Container requirements:
@liveexample{The following code shows an example for end()
.,end}
Definition at line 4172 of file json.hpp.
|
inline |
remove element from a JSON array given an index
Removes element from a JSON array at the index idx.
[in] | idx | index of the element to remove |
std::domain_error | when called on a type other than JSON array; example: "cannot use erase() with null" |
std::out_of_range | when idx >= size() ; example: "index out of
range" |
@complexity Linear in distance between idx and the end of the container.
@liveexample{The example shows the effect of erase()
.,erase__size_type}
|
inline |
remove element from a JSON object given a key
Removes elements from a JSON object with the key value key.
[in] | key | value of the elements to remove |
std::map
type, the return value will always be 0
(key was not found) or 1
(key was found).std::domain_error | when called on a type other than JSON object; example: "cannot use erase() with null" |
@complexity log(size()) + count(key)
@liveexample{The example shows the effect of erase()
.,erase__key_type}
|
inline |
remove elements given an iterator range
Removes the element specified by the range [first; last)
. The iterator first does not need to be dereferenceable if first == last
: erasing an empty range is a no-op.
If called on a primitive type other than null
, the resulting JSON value will be null
.
[in] | first | iterator to the beginning of the range to remove |
[in] | last | iterator past the end of the range to remove |
end()
iterator is returned.InteratorType | an iterator or const_iterator |
end()
iterator.std::domain_error | if called on a null value; example: "cannot use
erase() with null" |
std::domain_error | if called on iterators which does not belong to the current JSON value; example: "iterators do not fit current value" |
std::out_of_range | if called on a primitive type with invalid iterators (i.e., if first != begin() and last != end() ); example: "iterators out of range" |
@complexity The complexity depends on the type:
log(size()) + std::distance(first, last)
@liveexample{The example shows the result of erase()
for different JSON types.,erase__IteratorType_IteratorType}
|
inline |
remove element given an iterator
Removes the element specified by iterator pos. The iterator pos must be valid and dereferenceable. Thus the end()
iterator (which is valid, but is not dereferenceable) cannot be used as a value for pos.
If called on a primitive type other than null
, the resulting JSON value will be null
.
[in] | pos | iterator to the element to remove |
end()
iterator is returned.InteratorType | an iterator or const_iterator |
end()
iterator.std::domain_error | if called on a null value; example: "cannot use
erase() with null" |
std::domain_error | if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value" |
std::out_of_range | if called on a primitive type with invalid iterator (i.e., any iterator which is not begin() ); example: "iterator
out of range" |
@complexity The complexity depends on the type:
@liveexample{The example shows the result of erase()
for different JSON types.,erase__IteratorType}
|
inlinestaticprivate |
escape a string
Escape a string by replacing certain special characters by a sequence of an escape character (backslash) and another character and other control characters by a sequence of "\u" followed by a four-digit hex representation.
[in] | s | the string to escape |
@complexity Linear in the length of string s.
Definition at line 5806 of file json.hpp.
|
inlinestaticprivatenoexcept |
|
inline |
find an element in a JSON object
Finds an element in a JSON object with key equivalent to key. If the element is not found or the JSON value is not an object, end() is returned.
[in] | key | key value of the element to search for |
@complexity Logarithmic in the size of the JSON object.
@liveexample{The example shows how find()
is used.,find__key_type}
Definition at line 4012 of file json.hpp.
|
inline |
find an element in a JSON object
find an element in a JSON object Finds an element in a JSON object with key equivalent to key. If the element is not found or the JSON value is not an object, end() is returned.
[in] | key | key value of the element to search for |
@complexity Logarithmic in the size of the JSON object.
@liveexample{The example shows how find()
is used.,find__key_type}
|
inline |
access the first element
Returns a reference to the first element in the container. For a JSON container c
, the expression c.front()
is equivalent to *c.begin()
.
@complexity Constant.
null
(would throw std::out_of_range
) or an empty array or object (undefined behavior, guarded by assertions). std::out_of_range | when called on null value |
@liveexample{The following code shows an example for front()
.,front}
|
inline |
access the first element
Returns a reference to the first element in the container. For a JSON container c
, the expression c.front()
is equivalent to *c.begin()
.
@complexity Constant.
null
(would throw std::out_of_range
) or an empty array or object (undefined behavior, guarded by assertions). std::out_of_range | when called on null value |
@liveexample{The following code shows an example for front()
.,front}
|
inline |
get a value (explicit)
Explicit type conversion between the JSON value and a compatible value.
ValueType | non-pointer type compatible to the JSON value, for instance int for JSON integer numbers, bool for JSON booleans, or std::vector types for JSON arrays |
std::domain_error | in case passed type ValueType is incompatible to JSON; example: "type must be object, but is null" |
@complexity Linear in the size of the JSON value.
@liveexample{The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers\, (2) A JSON array can be converted to a standard std::vector<short>
\, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string\, json>
.,get__ValueType_const}
Definition at line 2789 of file json.hpp.
|
inlineconstexprnoexcept |
get a pointer value (explicit)
get a pointer value (explicit) Explicit pointer access to the internally stored JSON value. No copies are made.
PointerType | pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, number_unsigned_t, or number_float_t. |
nullptr
otherwise@complexity Constant.
@liveexample{The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a nullptr
is returned if the value and the requested pointer type does not match.,get__PointerType}
|
inlinenoexcept |
get a pointer value (explicit)
Explicit pointer access to the internally stored JSON value. No copies are made.
PointerType | pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, number_unsigned_t, or number_float_t. |
nullptr
otherwise@complexity Constant.
@liveexample{The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a nullptr
is returned if the value and the requested pointer type does not match.,get__PointerType}
|
inlinestatic |
|
inlineprivate |
|
inlineconstexprprivate |
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
inlineprivatenoexcept |
|
inlineprivatenoexcept |
|
inlineconstexprprivatenoexcept |
|
inlineconstexprprivatenoexcept |
|
inlineconstexprprivatenoexcept |
|
inlineconstexprprivatenoexcept |
|
inlineconstexprprivatenoexcept |
|
inlineconstexprprivatenoexcept |
|
inlineconstexprprivatenoexcept |
|
inlineprivatenoexcept |
|
inlineprivatenoexcept |
|
inlineprivatenoexcept |
|
inlineprivatenoexcept |
|
inlineprivatenoexcept |
|
inlineconstexprnoexcept |
get a pointer value (implicit)
get a pointer value (implicit) Implicit pointer access to the internally stored JSON value. No copies are made.
PointerType | pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, number_unsigned_t, or number_float_t. |
nullptr
otherwise@complexity Constant.
@liveexample{The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a nullptr
is returned if the value and the requested pointer type does not match.,get_ptr}
|
inlinenoexcept |
get a pointer value (implicit)
Implicit pointer access to the internally stored JSON value. No copies are made.
PointerType | pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, number_unsigned_t, or number_float_t. |
nullptr
otherwise@complexity Constant.
@liveexample{The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a nullptr
is returned if the value and the requested pointer type does not match.,get_ptr}
|
inline |
get a reference value (implicit)
Implict reference access to the internally stored JSON value. No copies are made.
ReferenceType | reference type; must be a reference to array_t, object_t, string_t, boolean_t, number_integer_t, or number_float_t. |
std::domain_error | in case passed type ReferenceType is incompatible with the stored JSON value |
@complexity Constant.
@liveexample{The example shows several calls to get_ref()
.,get_ref}
|
inline |
get a reference value (implicit)
get a reference value (implicit) Implict reference access to the internally stored JSON value. No copies are made.
ReferenceType | reference type; must be a reference to array_t, object_t, string_t, boolean_t, number_integer_t, or number_float_t. |
std::domain_error | in case passed type ReferenceType is incompatible with the stored JSON value |
@complexity Constant.
@liveexample{The example shows several calls to get_ref()
.,get_ref}
|
inlinestaticprivate |
helper function to implement get_ref()
This funcion helps to implement get_ref() without code duplication for const and non-const overloads
ThisType | will be deduced as basic_json or const basic_json |
std::domain_error | if ReferenceType does not match underlying value type of the current JSON |
|
inline |
inserts element
inserts element Inserts element val before iterator pos.
[in] | pos | iterator before which the content will be inserted; may be the end() iterator |
[in] | val | element to insert |
std::domain_error | if called on JSON values other than arrays; example: "cannot use insert() with string" |
std::domain_error | if pos is not an iterator of *this; example: "iterator does not fit current value" |
@complexity Constant plus linear in the distance between pos and end of the container.
@liveexample{The example shows how insert()
is used.,insert}
|
inline |
inserts element
Inserts element val before iterator pos.
[in] | pos | iterator before which the content will be inserted; may be the end() iterator |
[in] | val | element to insert |
std::domain_error | if called on JSON values other than arrays; example: "cannot use insert() with string" |
std::domain_error | if pos is not an iterator of *this; example: "iterator does not fit current value" |
@complexity Constant plus linear in the distance between pos and end of the container.
@liveexample{The example shows how insert()
is used.,insert}
Definition at line 4824 of file json.hpp.
|
inline |
inserts elements
Inserts elements from range [first, last)
before iterator pos.
[in] | pos | iterator before which the content will be inserted; may be the end() iterator |
[in] | first | begin of the range of elements to insert |
[in] | last | end of the range of elements to insert |
std::domain_error | if called on JSON values other than arrays; example: "cannot use insert() with string" |
std::domain_error | if pos is not an iterator of *this; example: "iterator does not fit current value" |
std::domain_error | if first and last do not belong to the same JSON value; example: "iterators do not fit" |
std::domain_error | if first or last are iterators into container for which insert is called; example: "passed iterators may not
belong to container" |
first==last
@complexity Linear in std::distance(first, last)
plus linear in the distance between pos and end of the container.
@liveexample{The example shows how insert()
is used.,insert__range}
|
inline |
inserts elements
Inserts cnt copies of val before iterator pos.
[in] | pos | iterator before which the content will be inserted; may be the end() iterator |
[in] | cnt | number of copies of val to insert |
[in] | val | element to insert |
cnt==0
std::domain_error | if called on JSON values other than arrays; example: "cannot use insert() with string" |
std::domain_error | if pos is not an iterator of *this; example: "iterator does not fit current value" |
@complexity Linear in cnt plus linear in the distance between pos and end of the container.
@liveexample{The example shows how insert()
is used.,insert__count}
|
inline |
inserts elements
Inserts elements from initializer list ilist before iterator pos.
[in] | pos | iterator before which the content will be inserted; may be the end() iterator |
[in] | ilist | initializer list to insert the values from |
std::domain_error | if called on JSON values other than arrays; example: "cannot use insert() with string" |
std::domain_error | if pos is not an iterator of *this; example: "iterator does not fit current value" |
ilist
is empty@complexity Linear in ilist.size()
plus linear in the distance between pos and end of the container.
@liveexample{The example shows how insert()
is used.,insert__ilist}
|
inlineconstexprnoexcept |
return whether value is an array
This function returns true iff the JSON value is an array.
true
if type is array, false
otherwise.@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies is_array()
for all JSON types.,is_array}
Definition at line 2373 of file json.hpp.
|
inlineconstexprnoexcept |
return whether value is a boolean
This function returns true iff the JSON value is a boolean.
true
if type is boolean, false
otherwise.@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies is_boolean()
for all JSON types.,is_boolean}
Definition at line 2214 of file json.hpp.
|
inlineconstexprnoexcept |
return whether value is discarded
This function returns true iff the JSON value was discarded during parsing with a callback function (see parser_callback_t).
false
for JSON values after parsing. That is, discarded values can only occur during parsing, but will be removed when inside a structured value or replaced by null in other cases.true
if type is discarded, false
otherwise.@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies is_discarded()
for all JSON types.,is_discarded}
Definition at line 2422 of file json.hpp.
|
inlineconstexprnoexcept |
return whether value is null
This function returns true iff the JSON value is null.
true
if type is null, false
otherwise.@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies is_null()
for all JSON types.,is_null}
Definition at line 2192 of file json.hpp.
|
inlineconstexprnoexcept |
return whether value is a number
This function returns true iff the JSON value is a number. This includes both integer and floating-point values.
true
if type is number (regardless whether integer, unsigned integer or floating-type), false
otherwise.@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies is_number()
for all JSON types.,is_number}
Definition at line 2244 of file json.hpp.
|
inlineconstexprnoexcept |
return whether value is a floating-point number
This function returns true iff the JSON value is a floating-point number. This excludes integer and unsigned integer values.
true
if type is a floating-point number, false
otherwise.@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies is_number_float()
for all JSON types.,is_number_float}
Definition at line 2329 of file json.hpp.
|
inlineconstexprnoexcept |
return whether value is an integer number
This function returns true iff the JSON value is an integer or unsigned integer number. This excludes floating-point values.
true
if type is an integer or unsigned integer number, false
otherwise.@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies is_number_integer()
for all JSON types.,is_number_integer}
Definition at line 2273 of file json.hpp.
|
inlineconstexprnoexcept |
return whether value is an unsigned integer number
This function returns true iff the JSON value is an unsigned integer number. This excludes floating-point and (signed) integer values.
true
if type is an unsigned integer number, false
otherwise.@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies is_number_unsigned()
for all JSON types.,is_number_unsigned}
Definition at line 2301 of file json.hpp.
|
inlineconstexprnoexcept |
return whether value is an object
This function returns true iff the JSON value is an object.
true
if type is object, false
otherwise.@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies is_object()
for all JSON types.,is_object}
Definition at line 2351 of file json.hpp.
|
inlineconstexprnoexcept |
return whether type is primitive
This function returns true iff the JSON type is primitive (string, number, boolean, or null).
true
if type is primitive (string, number, boolean, or null), false
otherwise.@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies is_primitive()
for all JSON types.,is_primitive}
null
|
inlineconstexprnoexcept |
return whether value is a string
This function returns true iff the JSON value is a string.
true
if type is string, false
otherwise.@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies is_string()
for all JSON types.,is_string}
Definition at line 2395 of file json.hpp.
|
inlineconstexprnoexcept |
return whether type is structured
This function returns true iff the JSON type is structured (array or object).
true
if type is structured (array or object), false
otherwise.@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies is_structured()
for all JSON types.,is_structured}
|
inlinestatic |
wrapper to access iterator member functions in range-based for
This function allows to access iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.
|
inlinestatic |
wrapper to access iterator member functions in range-based for
This function allows to access iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.
|
inlinenoexcept |
returns the maximum possible number of elements
Returns the maximum number of elements a JSON value is able to hold due to system or library implementation limitations, i.e. std::distance(begin(), end())
for the JSON value.
Value type | return value |
---|---|
null | 0 (same as size() ) |
boolean | 1 (same as size() ) |
string | 1 (same as size() ) |
number | 1 (same as size() ) |
object | result of function object_t::max_size() |
array | result of function array_t::max_size() |
@complexity Constant, as long as array_t and object_t satisfy the Container concept; that is, their max_size()
functions have constant complexity.
@requirement This function helps basic_json
satisfying the Container requirements:
b.size()
where b
is the largest possible JSON value.@liveexample{The following code calls max_size()
on the different value types. Note the output is implementation specific.,max_size}
|
inlinestatic |
explicitly create an object from an initializer list
Creates a JSON object value from a given initializer list. The initializer lists elements must be pairs, and their first elements must be strings. If the initializer list is empty, the empty object {}
is created.
[in] | init | initializer list to create an object from (optional) |
std::domain_error | if init is not a pair whose first elements are strings; thrown by basic_json(std::initializer_list<basic_json>, bool, value_t) |
@complexity Linear in the size of init.
@liveexample{The following code shows an example for the object
function.,object}
Definition at line 1667 of file json.hpp.
|
inlineconstexprnoexcept |
return the type of the JSON value (implicit)
Implicitly return the type of the JSON value as a value from the value_t enumeration.
@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies the value_t operator for all JSON types.,operator__value_t}
|
inline |
get a value (implicit)
Implicit type conversion between the JSON value and a compatible value. The call is realized by calling get() const.
ValueType | non-pointer type compatible to the JSON value, for instance int for JSON integer numbers, bool for JSON booleans, or std::vector types for JSON arrays. The character type of string_t as well as an initializer list of this type is excluded to avoid ambiguities as these types implicitly convert to std::string . |
std::domain_error | in case passed type ValueType is incompatible to JSON, thrown by get() const |
@complexity Linear in the size of the JSON value.
@liveexample{The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers\, (2) A JSON array can be converted to a standard std::vector<short>
\, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string\, json>
.,operator__ValueType}
|
inline |
add an object to an array
add an object to an array Appends the given element val to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending val.
[in] | val | the value to add to the JSON array |
std::domain_error | when called on a type other than JSON array or null; example: "cannot use push_back() with number" |
@complexity Amortized constant.
@liveexample{The example shows how push_back()
and +=
can be used to add elements to a JSON array. Note how the null
value was silently converted to a JSON array.,push_back}
|
inline |
add an object to an array
add an object to an array Appends the given element val to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending val.
[in] | val | the value to add to the JSON array |
std::domain_error | when called on a type other than JSON array or null; example: "cannot use push_back() with number" |
@complexity Amortized constant.
@liveexample{The example shows how push_back()
and +=
can be used to add elements to a JSON array. Note how the null
value was silently converted to a JSON array.,push_back}
|
inline |
add an object to an object
add an object to an object Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.
[in] | val | the value to add to the JSON object |
std::domain_error | when called on a type other than JSON object or null; example: "cannot use push_back() with number" |
@complexity Logarithmic in the size of the container, O(log(size()
)).
@liveexample{The example shows how push_back()
and +=
can be used to add elements to a JSON object. Note how the null
value was silently converted to a JSON object.,push_back__object_t__value}
|
inlinenoexcept |
copy assignment
Copy assignment operator. Copies a JSON value via the "copy and swap" strategy: It is expressed in terms of the copy constructor, destructor, and the swap() member function.
[in] | other | value to copy from |
@complexity Linear.
@requirement This function helps basic_json
satisfying the Container requirements:
@liveexample{The code below shows and example for the copy assignment. It creates a copy of value a
which is then swapped with b
. Finally\, the copy of a
(which is the null value after the swap) is destroyed.,basic_json__copyassignment}
|
inline |
access specified object element
Returns a reference to the element at with specified key key.
null
value to make key
a valid reference. In case the value was null
before, it is converted to an object.[in] | key | key of the element to access |
std::domain_error | if JSON is not an object or null; example: "cannot use operator[] with string" |
@complexity Logarithmic in the size of the container.
@liveexample{The example below shows how object elements can be read and written using the []
operator.,operatorarray__key_type}
|
inline |
read-only access specified object element
Returns a const reference to the element at with specified key key. No bounds checking is performed.
[in] | key | key of the element to access |
std::domain_error | if JSON is not an object; example: "cannot use
operator[] with null" |
@complexity Logarithmic in the size of the container.
@liveexample{The example below shows how object elements can be read using the []
operator.,operatorarray__key_type_const}
|
inline |
access specified array element
Returns a reference to the element at specified location idx.
idx >= size()
), then the array is silently filled up with null
values to make idx
a valid reference to the last stored element.[in] | idx | index of the element to access |
std::domain_error | if JSON is not an array or null; example: "cannot
use operator[] with string" |
@complexity Constant if idx is in the range of the array. Otherwise linear in idx - size()
.
@liveexample{The example below shows how array elements can be read and written using []
operator. Note the addition of null
values.,operatorarray__size_type}
Definition at line 3206 of file json.hpp.
|
inline |
access specified array element
Returns a const reference to the element at specified location idx.
[in] | idx | index of the element to access |
std::domain_error | if JSON is not an array; example: "cannot use
operator[] with null" |
@complexity Constant.
@liveexample{The example below shows how array elements can be read using the []
operator.,operatorarray__size_type_const}
|
inline |
access specified object element
Returns a reference to the element at with specified key key.
null
value to make key
a valid reference. In case the value was null
before, it is converted to an object.[in] | key | key of the element to access |
std::domain_error | if JSON is not an object or null; example: "cannot use operator[] with string" |
@complexity Logarithmic in the size of the container.
@liveexample{The example below shows how object elements can be read and written using the []
operator.,operatorarray__key_type}
|
inline |
read-only access specified object element
Returns a const reference to the element at with specified key key. No bounds checking is performed.
[in] | key | key of the element to access |
std::domain_error | if JSON is not an object; example: "cannot use
operator[] with null" |
@complexity Logarithmic in the size of the container.
@liveexample{The example below shows how object elements can be read using the []
operator.,operatorarray__key_type_const}
|
inline |
access specified object element
Returns a reference to the element at with specified key key.
null
value to make key
a valid reference. In case the value was null
before, it is converted to an object.[in] | key | key of the element to access |
std::domain_error | if JSON is not an object or null; example: "cannot use operator[] with string" |
@complexity Logarithmic in the size of the container.
@liveexample{The example below shows how object elements can be read and written using the []
operator.,operatorarray__key_type}
|
inline |
read-only access specified object element
Returns a const reference to the element at with specified key key. No bounds checking is performed.
[in] | key | key of the element to access |
std::domain_error | if JSON is not an object; example: "cannot use
operator[] with null" |
@complexity Logarithmic in the size of the container.
@liveexample{The example below shows how object elements can be read using the []
operator.,operatorarray__key_type_const}
|
inlinestatic |
deserialize from string
[in] | s | string to read a serialized JSON value from |
[in] | cb | a parser callback function of type parser_callback_t which is used to control the deserialization by filtering unwanted values (optional) |
@complexity Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function cb has a super-linear complexity.
@liveexample{The example below demonstrates the parse()
function with and without callback function.,parse__string__parser_callback_t}
Definition at line 5638 of file json.hpp.
|
inlinestatic |
deserialize from stream
[in,out] | i | stream to read a serialized JSON value from |
[in] | cb | a parser callback function of type parser_callback_t which is used to control the deserialization by filtering unwanted values (optional) |
@complexity Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function cb has a super-linear complexity.
@liveexample{The example below demonstrates the parse()
function with and without callback function.,parse__istream__parser_callback_t}
|
inlinestatic |
deserialize from stream
[in,out] | i | stream to read a serialized JSON value from |
[in] | cb | a parser callback function of type parser_callback_t which is used to control the deserialization by filtering unwanted values (optional) |
@complexity Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function cb has a super-linear complexity.
@liveexample{The example below demonstrates the parse()
function with and without callback function.,parse__istream__parser_callback_t}
|
inline |
add an object to an array
Appends the given element val to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending val.
[in] | val | the value to add to the JSON array |
std::domain_error | when called on a type other than JSON array or null; example: "cannot use push_back() with number" |
@complexity Amortized constant.
@liveexample{The example shows how push_back()
and +=
can be used to add elements to a JSON array. Note how the null
value was silently converted to a JSON array.,push_back}
Definition at line 4686 of file json.hpp.
|
inline |
add an object to an array
add an object to an array Appends the given element val to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending val.
[in] | val | the value to add to the JSON array |
std::domain_error | when called on a type other than JSON array or null; example: "cannot use push_back() with number" |
@complexity Amortized constant.
@liveexample{The example shows how push_back()
and +=
can be used to add elements to a JSON array. Note how the null
value was silently converted to a JSON array.,push_back}
|
inline |
add an object to an object
Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.
[in] | val | the value to add to the JSON object |
std::domain_error | when called on a type other than JSON object or null; example: "cannot use push_back() with number" |
@complexity Logarithmic in the size of the container, O(log(size()
)).
@liveexample{The example shows how push_back()
and +=
can be used to add elements to a JSON object. Note how the null
value was silently converted to a JSON object.,push_back__object_t__value}
|
inlinenoexcept |
returns a const reverse iterator to the last element
Returns a const iterator to the reverse-beginning; that is, the last element.
@complexity Constant.
@requirement This function helps basic_json
satisfying the ReversibleContainer requirements:
const_cast<const basic_json&>(*this).rbegin()
.@liveexample{The following code shows an example for crbegin()
.,crbegin}
|
inlinenoexcept |
returns an iterator to the reverse-beginning
Returns an iterator to the reverse-beginning; that is, the last element.
@complexity Constant.
@requirement This function helps basic_json
satisfying the ReversibleContainer requirements:
reverse_iterator(end())
.@liveexample{The following code shows an example for rbegin()
.,rbegin}
|
inlinenoexcept |
returns a const reverse iterator to one before the first
Returns a const reverse iterator to the reverse-end; that is, one before the first element.
@complexity Constant.
@requirement This function helps basic_json
satisfying the ReversibleContainer requirements:
const_cast<const basic_json&>(*this).rend()
.@liveexample{The following code shows an example for crend()
.,crend}
|
inlinenoexcept |
returns an iterator to the reverse-end
Returns an iterator to the reverse-end; that is, one before the first element.
@complexity Constant.
@requirement This function helps basic_json
satisfying the ReversibleContainer requirements:
reverse_iterator(begin())
.@liveexample{The following code shows an example for rend()
.,rend}
|
inlinenoexcept |
returns the number of elements
Returns the number of elements in a JSON value.
Value type | return value |
---|---|
null | 0 |
boolean | 1 |
string | 1 |
number | 1 |
object | result of function object_t::size() |
array | result of function array_t::size() |
@complexity Constant, as long as array_t and object_t satisfy the Container concept; that is, their size() functions have constant complexity.
@requirement This function helps basic_json
satisfying the Container requirements:
@liveexample{The following code calls size()
on the different value types.,size}
Definition at line 4485 of file json.hpp.
|
inline |
exchanges the values
Exchanges the contents of a JSON array with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
[in,out] | other | array to exchange the contents with |
std::domain_error | when JSON value is not an array; example: "cannot
use swap() with string" |
@complexity Constant.
@liveexample{The example below shows how arrays can be swapped with swap()
.,swap__array_t}
|
inline |
exchanges the values
Exchanges the contents of a JSON object with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
[in,out] | other | object to exchange the contents with |
std::domain_error | when JSON value is not an object; example: "cannot use swap() with string" |
@complexity Constant.
@liveexample{The example below shows how objects can be swapped with swap()
.,swap__object_t}
|
inlinenoexcept |
exchanges the values
Exchanges the contents of the JSON value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
[in,out] | other | JSON value to exchange the contents with |
@complexity Constant.
@liveexample{The example below shows how JSON values can be swapped with swap()
.,swap__reference}
Definition at line 5029 of file json.hpp.
|
inline |
exchanges the values
Exchanges the contents of a JSON string with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
[in,out] | other | string to exchange the contents with |
std::domain_error | when JSON value is not a string; example: "cannot
use swap() with boolean" |
@complexity Constant.
@liveexample{The example below shows how strings can be swapped with swap()
.,swap__string_t}
|
inlineconstexprnoexcept |
return the type of the JSON value (explicit)
Return the type of the JSON value as a value from the value_t enumeration.
@complexity Constant.
@exceptionsafety No-throw guarantee: this member function never throws exceptions.
@liveexample{The following code exemplifies type()
for all JSON types.,type}
|
inlineprivatenoexcept |
|
inline |
overload for a default value of type const char*
access specified object element with default value Returns either a copy of an object's element at the specified key key or a given default value if no element with key key exists.
The function is basically equivalent to executing
[in] | key | key of the element to access |
[in] | default_value | the value to return if key is not found |
ValueType | type compatible to JSON values, for instance int for JSON integer numbers, bool for JSON booleans, or std::vector types for JSON arrays. Note the type of the expected value at key and the default value default_value must be compatible. |
std::domain_error | if JSON is not an object; example: "cannot use
value() with null" |
@complexity Logarithmic in the size of the container.
@liveexample{The example below shows how object elements can be queried with a default value.,basic_json__value}
|
inline |
access specified object element with default value
Returns either a copy of an object's element at the specified key key or a given default value if no element with key key exists.
The function is basically equivalent to executing
[in] | key | key of the element to access |
[in] | default_value | the value to return if key is not found |
ValueType | type compatible to JSON values, for instance int for JSON integer numbers, bool for JSON booleans, or std::vector types for JSON arrays. Note the type of the expected value at key and the default value default_value must be compatible. |
std::domain_error | if JSON is not an object; example: "cannot use
value() with null" |
@complexity Logarithmic in the size of the container.
@liveexample{The example below shows how object elements can be queried with a default value.,basic_json__value}
Definition at line 3568 of file json.hpp.
|
friend |
comparison: not equal
Compares two JSON values for inequality by calculating not (lhs == rhs)
.
[in] | lhs | first JSON value to consider |
[in] | rhs | second JSON value to consider |
@complexity Linear.
@liveexample{The example demonstrates comparing several JSON types.,operator__notequal}
|
friend |
comparison: not equal
The functions compares the given JSON value against a null pointer. As the null pointer can be used to initialize a JSON value to null, a comparison of JSON value v with a null pointer should be equivalent to call not v.is_null()
.
[in] | v | JSON value to consider |
@complexity Constant.
@liveexample{The example compares several JSON types to the null pointer. ,operator__notequal__nullptr_t}
|
friend |
comparison: not equal
comparison: not equal The functions compares the given JSON value against a null pointer. As the null pointer can be used to initialize a JSON value to null, a comparison of JSON value v with a null pointer should be equivalent to call not v.is_null()
.
[in] | v | JSON value to consider |
@complexity Constant.
@liveexample{The example compares several JSON types to the null pointer. ,operator__notequal__nullptr_t}
|
friend |
|
friend |
comparison: less than
Compares whether one JSON value lhs is less than another JSON value rhs according to the following rules:
<
operator.[in] | lhs | first JSON value to consider |
[in] | rhs | second JSON value to consider |
@complexity Linear.
@liveexample{The example demonstrates comparing several JSON types.,operator__less}
|
friend |
deserialize from stream
Deserializes an input stream to a JSON value.
[in,out] | i | input stream to read a serialized JSON value from |
[in,out] | j | JSON value to write the deserialized input to |
std::invalid_argument | in case of parse errors |
@complexity Linear in the length of the input. The parser is a predictive LL(1) parser.
@liveexample{The example below shows how a JSON value is constructed by reading a serialization from a stream.,operator_deserialize}
|
friend |
serialize to stream
Serialize the given JSON value j to the output stream o. The JSON value will be serialized using the dump member function. The indentation of the output can be controlled with the member variable width
of the output stream o. For instance, using the manipulator std::setw(4)
on o sets the indentation level to 4
and the serialization result is the same as calling dump(4)
.
[in,out] | o | stream to serialize to |
[in] | j | JSON value to serialize |
@complexity Linear.
@liveexample{The example below shows the serialization with different parameters to width
to adjust the indentation level.,operator_serialize}
|
friend |
comparison: less than or equal
Compares whether one JSON value lhs is less than or equal to another JSON value by calculating not (rhs < lhs)
.
[in] | lhs | first JSON value to consider |
[in] | rhs | second JSON value to consider |
@complexity Linear.
@liveexample{The example demonstrates comparing several JSON types.,operator__greater}
|
friend |
comparison: equal
Compares two JSON values for equality according to the following rules:
f1
and f2
are considered equal if neither f1 > f2
nor f2 > f1
holds.[in] | lhs | first JSON value to consider |
[in] | rhs | second JSON value to consider |
@complexity Linear.
@liveexample{The example demonstrates comparing several JSON types.,operator__equal}
|
friend |
comparison: equal
The functions compares the given JSON value against a null pointer. As the null pointer can be used to initialize a JSON value to null, a comparison of JSON value v with a null pointer should be equivalent to call v.is_null()
.
[in] | v | JSON value to consider |
@complexity Constant.
@liveexample{The example compares several JSON types to the null pointer. ,operator__equal__nullptr_t}
|
friend |
comparison: equal
comparison: equal The functions compares the given JSON value against a null pointer. As the null pointer can be used to initialize a JSON value to null, a comparison of JSON value v with a null pointer should be equivalent to call v.is_null()
.
[in] | v | JSON value to consider |
@complexity Constant.
@liveexample{The example compares several JSON types to the null pointer. ,operator__equal__nullptr_t}
|
friend |
comparison: greater than
Compares whether one JSON value lhs is greater than another JSON value by calculating not (lhs <= rhs)
.
[in] | lhs | first JSON value to consider |
[in] | rhs | second JSON value to consider |
@complexity Linear.
@liveexample{The example demonstrates comparing several JSON types.,operator__lessequal}
|
friend |
comparison: greater than or equal
Compares whether one JSON value lhs is greater than or equal to another JSON value by calculating not (lhs < rhs)
.
[in] | lhs | first JSON value to consider |
[in] | rhs | second JSON value to consider |
@complexity Linear.
@liveexample{The example demonstrates comparing several JSON types.,operator__greaterequal}
|
friend |
serialize to stream
serialize to stream Serialize the given JSON value j to the output stream o. The JSON value will be serialized using the dump member function. The indentation of the output can be controlled with the member variable width
of the output stream o. For instance, using the manipulator std::setw(4)
on o sets the indentation level to 4
and the serialization result is the same as calling dump(4)
.
[in,out] | o | stream to serialize to |
[in] | j | JSON value to serialize |
@complexity Linear.
@liveexample{The example below shows the serialization with different parameters to width
to adjust the indentation level.,operator_serialize}
|
friend |
deserialize from stream
deserialize from stream Deserializes an input stream to a JSON value.
[in,out] | i | input stream to read a serialized JSON value from |
[in,out] | j | JSON value to write the deserialized input to |
std::invalid_argument | in case of parse errors |
@complexity Linear in the length of the input. The parser is a predictive LL(1) parser.
@liveexample{The example below shows how a JSON value is constructed by reading a serialization from a stream.,operator_deserialize}
|
private |
|
private |