Merge commit '55f3024dc9f206862ed3f328e8a1ffc91f7e19d2' into back-to-imgui
This commit is contained in:
32
external/json/docs/mkdocs/Makefile
vendored
32
external/json/docs/mkdocs/Makefile
vendored
@@ -1,39 +1,39 @@
|
||||
# serve the site locally
|
||||
serve: prepare_files style_check
|
||||
serve: style_check
|
||||
venv/bin/mkdocs serve
|
||||
|
||||
serve_dirty: prepare_files style_check
|
||||
serve_dirty: style_check
|
||||
venv/bin/mkdocs serve --dirtyreload
|
||||
|
||||
build: prepare_files style_check
|
||||
# This target is used in the CI (ci_test_build_documentation).
|
||||
# This target is used by the docset Makefile.
|
||||
build: style_check
|
||||
venv/bin/mkdocs build
|
||||
|
||||
# create files that are not versioned inside the mkdocs folder (images, examples)
|
||||
prepare_files: clean
|
||||
mkdir docs/examples
|
||||
cp -r ../json.gif docs/images
|
||||
cp -r ../examples/*.cpp ../examples/*.output docs/examples
|
||||
|
||||
style_check:
|
||||
@cd docs ; python3 ../scripts/check_structure.py
|
||||
@cd docs ; ../venv/bin/python3 ../scripts/check_structure.py
|
||||
|
||||
# clean subfolders
|
||||
clean:
|
||||
rm -fr docs/images/json.gif docs/examples
|
||||
# check the links in the documentation files in docs/mkdocs
|
||||
link_check:
|
||||
ENABLED_HTMLPROOFER=true venv/bin/mkdocs build
|
||||
|
||||
# check the links in all other Markdown files
|
||||
link_check_markdowns:
|
||||
npx markdown-link-check --progress --alive 200,429 ../../README.md ../../FILES.md ../../.github/*.md
|
||||
|
||||
# publish site to GitHub pages (not working in GitHub Actions; need special action)
|
||||
publish: prepare_files
|
||||
publish:
|
||||
venv/bin/mkdocs gh-deploy --clean --force
|
||||
|
||||
# install a Python virtual environment
|
||||
# This target is used by the docset Makefile.
|
||||
install_venv: requirements.txt
|
||||
python3 -mvenv venv
|
||||
venv/bin/pip install --upgrade pip
|
||||
venv/bin/pip install wheel
|
||||
venv/bin/pip install -r requirements.txt
|
||||
|
||||
# uninstall the virtual environment
|
||||
uninstall_venv: clean
|
||||
uninstall_venv:
|
||||
rm -fr venv
|
||||
|
||||
update_requirements:
|
||||
|
||||
@@ -17,10 +17,10 @@ Checks whether the input is valid JSON.
|
||||
1. Reads from a compatible input.
|
||||
2. Reads from a pair of character iterators
|
||||
|
||||
The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted
|
||||
respectively as UTF-8, UTF-16 and UTF-32.
|
||||
The value_type of the iterator must be an integral type with a size of 1, 2, or 4 bytes, which will be interpreted
|
||||
respectively as UTF-8, UTF-16, and UTF-32.
|
||||
|
||||
Unlike the [`parse`](parse.md) function, this function neither throws an exception in case of invalid JSON input
|
||||
Unlike the [`parse()`](parse.md) function, this function neither throws an exception in case of invalid JSON input
|
||||
(i.e., a parse error) nor creates diagnostic information.
|
||||
|
||||
## Template parameters
|
||||
@@ -29,7 +29,7 @@ Unlike the [`parse`](parse.md) function, this function neither throws an excepti
|
||||
: A compatible input, for instance:
|
||||
|
||||
- an `std::istream` object
|
||||
- a `FILE` pointer (throws if null)
|
||||
- a `#!c FILE` pointer (throws if null)
|
||||
- a C-style array of characters
|
||||
- a pointer to a null-terminated string of single byte characters (throws if null)
|
||||
- a `std::string`
|
||||
@@ -51,10 +51,10 @@ Unlike the [`parse`](parse.md) function, this function neither throws an excepti
|
||||
(`#!cpp false`); (optional, `#!cpp false` by default)
|
||||
|
||||
`first` (in)
|
||||
: iterator to start of character range
|
||||
: iterator to the start of the character range
|
||||
|
||||
`last` (in)
|
||||
: iterator to end of character range
|
||||
: iterator to the end of the character range
|
||||
|
||||
## Return value
|
||||
|
||||
@@ -66,7 +66,7 @@ Strong guarantee: if an exception is thrown, there are no changes in the JSON va
|
||||
|
||||
## Exceptions
|
||||
|
||||
Throws [`parse_error.101`](../../home/exceptions.md#jsonexceptionparse_error101) in case of an empty input like a null `FILE*` or `char*` pointer.
|
||||
Throws [`parse_error.101`](../../home/exceptions.md#jsonexceptionparse_error101) in case of an empty input like a null `#!c FILE*` or `#!c char*` pointer.
|
||||
|
||||
## Complexity
|
||||
|
||||
@@ -101,7 +101,7 @@ A UTF-8 byte order mark is silently ignored.
|
||||
|
||||
- Added in version 3.0.0.
|
||||
- Ignoring comments via `ignore_comments` added in version 3.9.0.
|
||||
- Changed [runtime assertion](../../features/assertions.md) in case of `FILE*` null pointers to exception in version 3.11.4.
|
||||
- Changed [runtime assertion](../../features/assertions.md) in case of `FILE*` null pointers to exception in version 3.12.0.
|
||||
|
||||
!!! warning "Deprecation"
|
||||
|
||||
|
||||
@@ -59,29 +59,29 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
||||
|
||||
1. The function can throw the following exceptions:
|
||||
- Throws [`type_error.304`](../../home/exceptions.md#jsonexceptiontype_error304) if the JSON value is not an array;
|
||||
in this case, calling `at` with an index makes no sense. See example below.
|
||||
in this case, calling `at` with an index makes no sense. See the example below.
|
||||
- Throws [`out_of_range.401`](../../home/exceptions.md#jsonexceptionout_of_range401) if the index `idx` is out of
|
||||
range of the array; that is, `idx >= size()`. See example below.
|
||||
range of the array; that is, `idx >= size()`. See the example below.
|
||||
2. The function can throw the following exceptions:
|
||||
- Throws [`type_error.304`](../../home/exceptions.md#jsonexceptiontype_error304) if the JSON value is not an object;
|
||||
in this case, calling `at` with a key makes no sense. See example below.
|
||||
in this case, calling `at` with a key makes no sense. See the example below.
|
||||
- Throws [`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if the key `key` is not
|
||||
stored in the object; that is, `find(key) == end()`. See example below.
|
||||
stored in the object; that is, `find(key) == end()`. See the example below.
|
||||
3. See 2.
|
||||
4. The function can throw the following exceptions:
|
||||
- Throws [`parse_error.106`](../../home/exceptions.md#jsonexceptionparse_error106) if an array index in the passed
|
||||
JSON pointer `ptr` begins with '0'. See example below.
|
||||
JSON pointer `ptr` begins with '0'. See the example below.
|
||||
- Throws [`parse_error.109`](../../home/exceptions.md#jsonexceptionparse_error109) if an array index in the passed
|
||||
JSON pointer `ptr` is not a number. See example below.
|
||||
JSON pointer `ptr` is not a number. See the example below.
|
||||
- Throws [`out_of_range.401`](../../home/exceptions.md#jsonexceptionout_of_range401) if an array index in the passed
|
||||
JSON pointer `ptr` is out of range. See example below.
|
||||
JSON pointer `ptr` is out of range. See the example below.
|
||||
- Throws [`out_of_range.402`](../../home/exceptions.md#jsonexceptionout_of_range402) if the array index '-' is used
|
||||
in the passed JSON pointer `ptr`. As `at` provides checked access (and no elements are implicitly inserted), the
|
||||
index '-' is always invalid. See example below.
|
||||
index '-' is always invalid. See the example below.
|
||||
- Throws [`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if the JSON pointer describes a
|
||||
key of an object which cannot be found. See example below.
|
||||
key of an object which cannot be found. See the example below.
|
||||
- Throws [`out_of_range.404`](../../home/exceptions.md#jsonexceptionout_of_range404) if the JSON pointer `ptr` can
|
||||
not be resolved. See example below.
|
||||
not be resolved. See the example below.
|
||||
|
||||
## Complexity
|
||||
|
||||
@@ -215,8 +215,8 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
||||
## See also
|
||||
|
||||
- documentation on [checked access](../../features/element_access/checked_access.md)
|
||||
- see [`operator[]`](operator%5B%5D.md) for unchecked access by reference
|
||||
- see [`value`](value.md) for access with default value
|
||||
- [`operator[]`](operator%5B%5D.md) for unchecked access by reference
|
||||
- [`value`](value.md) for access with default value
|
||||
|
||||
## Version history
|
||||
|
||||
|
||||
@@ -17,8 +17,8 @@ return *tmp;
|
||||
|
||||
## Return value
|
||||
|
||||
In case of a structured type (array or object), a reference to the last element is returned. In case of number, string,
|
||||
boolean, or binary values, a reference to the value is returned.
|
||||
In the case of a structured type (array or object), a reference to the last element is returned. In the case of number,
|
||||
string, boolean, or binary values, a reference to the value is returned.
|
||||
|
||||
## Exception safety
|
||||
|
||||
|
||||
@@ -99,8 +99,8 @@ basic_json(basic_json&& other) noexcept;
|
||||
2. C++ has no way of describing mapped types other than to list a list of pairs. As JSON requires that keys must be
|
||||
of type string, rule 2 is the weakest constraint one can pose on initializer lists to interpret them as an
|
||||
object.
|
||||
3. In all other cases, the initializer list could not be interpreted as JSON object type, so interpreting it as JSON
|
||||
array type is safe.
|
||||
3. In all other cases, the initializer list could not be interpreted as a JSON object type, so interpreting it as a
|
||||
JSON array type is safe.
|
||||
|
||||
With the rules described above, the following JSON values cannot be expressed by an initializer list:
|
||||
|
||||
@@ -113,7 +113,7 @@ basic_json(basic_json&& other) noexcept;
|
||||
6. Constructs a JSON array value by creating `cnt` copies of a passed value. In case `cnt` is `0`, an empty array is
|
||||
created.
|
||||
|
||||
7. Constructs the JSON value with the contents of the range `[first, last)`. The semantics depends on the different
|
||||
7. Constructs the JSON value with the contents of the range `[first, last)`. The semantics depend on the different
|
||||
types a JSON value can have:
|
||||
|
||||
- In case of a `#!json null` type, [invalid_iterator.206](../../home/exceptions.md#jsonexceptioninvalid_iterator206)
|
||||
@@ -175,10 +175,10 @@ basic_json(basic_json&& other) noexcept;
|
||||
: the number of JSON copies of `val` to create
|
||||
|
||||
`first` (in)
|
||||
: begin of the range to copy from (included)
|
||||
: the beginning of the range to copy from (included)
|
||||
|
||||
`last` (in)
|
||||
: end of the range to copy from (excluded)
|
||||
: the end of the range to copy from (excluded)
|
||||
|
||||
`other` (in)
|
||||
: the JSON value to copy/move
|
||||
@@ -188,10 +188,10 @@ basic_json(basic_json&& other) noexcept;
|
||||
1. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
|
||||
2. No-throw guarantee: this constructor never throws exceptions.
|
||||
3. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no
|
||||
`to_json()` function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any
|
||||
`to_json()` function was provided), a strong guarantee holds: if an exception is thrown, there are no changes to any
|
||||
JSON value.
|
||||
4. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no
|
||||
`to_json()` function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any
|
||||
`to_json()` function was provided), a strong guarantee holds: if an exception is thrown, there are no changes to any
|
||||
JSON value.
|
||||
5. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
|
||||
6. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
|
||||
@@ -217,7 +217,7 @@ basic_json(basic_json&& other) noexcept;
|
||||
`[first, last)` is undefined.
|
||||
- Throws [`invalid_iterator.204`](../../home/exceptions.md#jsonexceptioninvalid_iterator204) if iterators `first`
|
||||
and `last` belong to a primitive type (number, boolean, or string), but `first` does not point to the first
|
||||
element anymore. In this case, the range `[first, last)` is undefined. See example code below.
|
||||
element anymore. In this case, the range `[first, last)` is undefined. See the example code below.
|
||||
- Throws [`invalid_iterator.206`](../../home/exceptions.md#jsonexceptioninvalid_iterator206) if iterators `first`
|
||||
and `last` belong to a `#!json null` value. In this case, the range `[first, last)` is undefined.
|
||||
8. (none)
|
||||
@@ -333,7 +333,7 @@ basic_json(basic_json&& other) noexcept;
|
||||
--8<-- "examples/basic_json__list_init_t.output"
|
||||
```
|
||||
|
||||
??? example "Example: (6) construct an array with count copies of given value"
|
||||
??? example "Example: (6) construct an array with count copies of a given value"
|
||||
|
||||
The following code shows examples for creating arrays with several copies of a given value.
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ create a value for serialization to those formats.
|
||||
## Parameters
|
||||
|
||||
`init` (in)
|
||||
: container containing bytes to use as binary type
|
||||
: container containing bytes to use as a binary type
|
||||
|
||||
`subtype` (in)
|
||||
: subtype to use in CBOR, MessagePack, and BSON
|
||||
@@ -42,8 +42,8 @@ Linear in the size of `init`; constant for `typename binary_t::container_type&&
|
||||
|
||||
Note, this function exists because of the difficulty in correctly specifying the correct template overload in the
|
||||
standard value ctor, as both JSON arrays and JSON binary arrays are backed with some form of a `std::vector`. Because
|
||||
JSON binary arrays are a non-standard extension it was decided that it would be best to prevent automatic initialization
|
||||
of a binary array type, for backwards compatibility and so it does not happen on accident.
|
||||
JSON binary arrays are a non-standard extension, it was decided that it would be best to prevent automatic
|
||||
initialization of a binary array type, for backwards compatibility and so it does not happen on accident.
|
||||
|
||||
## Examples
|
||||
|
||||
|
||||
@@ -56,11 +56,11 @@ type `#!cpp binary_t*` must be dereferenced.
|
||||
- MessagePack
|
||||
- If a subtype is given and the binary array contains exactly 1, 2, 4, 8, or 16 elements, the fixext family (fixext1,
|
||||
fixext2, fixext4, fixext8) is used. For other sizes, the ext family (ext8, ext16, ext32) is used. The subtype is
|
||||
then added as signed 8-bit integer.
|
||||
then added as a signed 8-bit integer.
|
||||
- If no subtype is given, the bin family (bin8, bin16, bin32) is used.
|
||||
|
||||
- BSON
|
||||
- If a subtype is given, it is used and added as unsigned 8-bit integer.
|
||||
- If a subtype is given, it is used and added as an unsigned 8-bit integer.
|
||||
- If no subtype is given, the generic binary subtype 0x00 is used.
|
||||
|
||||
## Examples
|
||||
@@ -86,4 +86,4 @@ type `#!cpp binary_t*` must be dereferenced.
|
||||
|
||||
## Version history
|
||||
|
||||
- Added in version 3.8.0. Changed type of subtype to `std::uint64_t` in version 3.10.0.
|
||||
- Added in version 3.8.0. Changed the type of subtype to `std::uint64_t` in version 3.10.0.
|
||||
|
||||
@@ -33,7 +33,7 @@ Linear in the size of the JSON value.
|
||||
|
||||
## Notes
|
||||
|
||||
All iterators, pointers and references related to this container are invalidated.
|
||||
All iterators, pointers, and references related to this container are invalidated.
|
||||
|
||||
## Examples
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ bool contains(const json_pointer& ptr) const;
|
||||
|
||||
## Return value
|
||||
|
||||
1. `#!cpp true` if an element with specified `key` exists. If no such element with such key is found or the JSON value
|
||||
1. `#!cpp true` if an element with specified `key` exists. If no such element with such a key is found or the JSON value
|
||||
is not an object, `#!cpp false` is returned.
|
||||
2. See 1.
|
||||
3. `#!cpp true` if the JSON pointer can be resolved to a stored value, `#!cpp false` otherwise.
|
||||
|
||||
@@ -8,7 +8,7 @@ string_t dump(const int indent = -1,
|
||||
```
|
||||
|
||||
Serialization function for JSON values. The function tries to mimic Python's
|
||||
[`json.dumps()` function](https://docs.python.org/2/library/json.html#json.dump), and currently supports its `indent`
|
||||
[`json.dumps()` function](https://docs.python.org/2/library/json.html#json.dump), and currently supports its `indent`
|
||||
and `ensure_ascii` parameters.
|
||||
|
||||
## Parameters
|
||||
@@ -49,7 +49,7 @@ Linear.
|
||||
|
||||
## Notes
|
||||
|
||||
Binary values are serialized as object containing two keys:
|
||||
Binary values are serialized as an object containing two keys:
|
||||
|
||||
- "bytes": an array of bytes as integers
|
||||
- "subtype": the subtype as integer or `#!json null` if the binary has no subtype
|
||||
|
||||
68
external/json/docs/mkdocs/docs/api/basic_json/end_pos.md
vendored
Normal file
68
external/json/docs/mkdocs/docs/api/basic_json/end_pos.md
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
# <small>nlohmann::basic_json::</small>end_pos
|
||||
|
||||
```cpp
|
||||
#if JSON_DIAGNOSTIC_POSITIONS
|
||||
constexpr std::size_t end_pos() const noexcept;
|
||||
#endif
|
||||
```
|
||||
|
||||
Returns the position immediately following the last character of the JSON string from which the value was parsed from.
|
||||
|
||||
| JSON type | return value |
|
||||
|-----------|-----------------------------------|
|
||||
| object | position after the closing `}` |
|
||||
| array | position after the closing `]` |
|
||||
| string | position after the closing `"` |
|
||||
| number | position after the last character |
|
||||
| boolean | position after `e` |
|
||||
| null | position after `l` |
|
||||
|
||||
## Return value
|
||||
|
||||
the position of the character _following_ the last character of the given value in the parsed JSON string, if the
|
||||
value was created by the [`parse`](parse.md) function, or `std::string::npos` if the value was constructed otherwise
|
||||
|
||||
## Exception safety
|
||||
|
||||
No-throw guarantee: this member function never throws exceptions.
|
||||
|
||||
## Complexity
|
||||
|
||||
Constant.
|
||||
|
||||
## Notes
|
||||
|
||||
!!! note "Note"
|
||||
|
||||
The function is only available if macro [`JSON_DIAGNOSTIC_POSITIONS`](../macros/json_diagnostic_positions.md) has
|
||||
been defined to `#!cpp 1` before including the library header.
|
||||
|
||||
!!! warning "Invalidation"
|
||||
|
||||
The returned positions are only valid as long as the JSON value is not changed. The positions are *not* updated
|
||||
when the JSON value is changed.
|
||||
|
||||
## Examples
|
||||
|
||||
??? example "Example"
|
||||
|
||||
```cpp
|
||||
--8<-- "examples/diagnostic_positions.cpp"
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
--8<-- "examples/diagnostic_positions.output"
|
||||
```
|
||||
|
||||
The output shows the start/end positions of all the objects and fields in the JSON string.
|
||||
|
||||
## See also
|
||||
|
||||
- [start_pos](start_pos.md) to access the start position
|
||||
- [JSON_DIAGNOSTIC_POSITIONS](../macros/json_diagnostic_positions.md) for an overview of the diagnostic positions
|
||||
|
||||
## Version history
|
||||
|
||||
- Added in version 3.12.0.
|
||||
@@ -18,7 +18,7 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
||||
|
||||
## Complexity
|
||||
|
||||
Linear in the size the JSON value.
|
||||
Linear in the size of the JSON value.
|
||||
|
||||
## Notes
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ Deserializes a given input to a JSON value using the BJData (Binary JData) seria
|
||||
1. Reads from a compatible input.
|
||||
2. Reads from an iterator range.
|
||||
|
||||
The exact mapping and its limitations is described on a [dedicated page](../../features/binary_formats/bjdata.md).
|
||||
The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/bjdata.md).
|
||||
|
||||
## Template parameters
|
||||
|
||||
@@ -40,10 +40,10 @@ The exact mapping and its limitations is described on a [dedicated page](../../f
|
||||
: an input in BJData format convertible to an input adapter
|
||||
|
||||
`first` (in)
|
||||
: iterator to start of the input
|
||||
: iterator to the start of the input
|
||||
|
||||
`last` (in)
|
||||
: iterator to end of the input
|
||||
: iterator to the end of the input
|
||||
|
||||
`strict` (in)
|
||||
: whether to expect the input to be consumed until EOF (`#!cpp true` by default)
|
||||
@@ -63,7 +63,7 @@ Strong guarantee: if an exception is thrown, there are no changes in the JSON va
|
||||
## Exceptions
|
||||
|
||||
- Throws [parse_error.110](../../home/exceptions.md#jsonexceptionparse_error110) if the given input ends prematurely or
|
||||
the end of file was not reached when `strict` was set to true
|
||||
the end of the file was not reached when `strict` was set to true
|
||||
- Throws [parse_error.112](../../home/exceptions.md#jsonexceptionparse_error112) if a parse error occurs
|
||||
- Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a string could not be parsed
|
||||
successfully
|
||||
|
||||
@@ -18,7 +18,7 @@ Deserializes a given input to a JSON value using the BSON (Binary JSON) serializ
|
||||
1. Reads from a compatible input.
|
||||
2. Reads from an iterator range.
|
||||
|
||||
The exact mapping and its limitations is described on a [dedicated page](../../features/binary_formats/bson.md).
|
||||
The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/bson.md).
|
||||
|
||||
## Template parameters
|
||||
|
||||
@@ -40,10 +40,10 @@ The exact mapping and its limitations is described on a [dedicated page](../../f
|
||||
: an input in BSON format convertible to an input adapter
|
||||
|
||||
`first` (in)
|
||||
: iterator to start of the input
|
||||
: iterator to the start of the input
|
||||
|
||||
`last` (in)
|
||||
: iterator to end of the input
|
||||
: iterator to the end of the input
|
||||
|
||||
`strict` (in)
|
||||
: whether to expect the input to be consumed until EOF (`#!cpp true` by default)
|
||||
|
||||
@@ -21,7 +21,7 @@ Deserializes a given input to a JSON value using the CBOR (Concise Binary Object
|
||||
1. Reads from a compatible input.
|
||||
2. Reads from an iterator range.
|
||||
|
||||
The exact mapping and its limitations is described on a [dedicated page](../../features/binary_formats/cbor.md).
|
||||
The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/cbor.md).
|
||||
|
||||
## Template parameters
|
||||
|
||||
@@ -43,10 +43,10 @@ The exact mapping and its limitations is described on a [dedicated page](../../f
|
||||
: an input in CBOR format convertible to an input adapter
|
||||
|
||||
`first` (in)
|
||||
: iterator to start of the input
|
||||
: iterator to the start of the input
|
||||
|
||||
`last` (in)
|
||||
: iterator to end of the input
|
||||
: iterator to the end of the input
|
||||
|
||||
`strict` (in)
|
||||
: whether to expect the input to be consumed until EOF (`#!cpp true` by default)
|
||||
@@ -70,10 +70,10 @@ Strong guarantee: if an exception is thrown, there are no changes in the JSON va
|
||||
## Exceptions
|
||||
|
||||
- Throws [parse_error.110](../../home/exceptions.md#jsonexceptionparse_error110) if the given input ends prematurely or
|
||||
the end of file was not reached when `strict` was set to true
|
||||
the end of the file was not reached when `strict` was set to true
|
||||
- Throws [parse_error.112](../../home/exceptions.md#jsonexceptionparse_error112) if unsupported features from CBOR were
|
||||
used in the given input or if the input is not valid CBOR
|
||||
- Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a string was expected as map key,
|
||||
- Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a string was expected as a map key,
|
||||
but not found
|
||||
|
||||
## Complexity
|
||||
|
||||
@@ -18,7 +18,7 @@ Deserializes a given input to a JSON value using the MessagePack serialization f
|
||||
1. Reads from a compatible input.
|
||||
2. Reads from an iterator range.
|
||||
|
||||
The exact mapping and its limitations is described on a [dedicated page](../../features/binary_formats/messagepack.md).
|
||||
The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/messagepack.md).
|
||||
|
||||
## Template parameters
|
||||
|
||||
@@ -40,10 +40,10 @@ The exact mapping and its limitations is described on a [dedicated page](../../f
|
||||
: an input in MessagePack format convertible to an input adapter
|
||||
|
||||
`first` (in)
|
||||
: iterator to start of the input
|
||||
: iterator to the start of the input
|
||||
|
||||
`last` (in)
|
||||
: iterator to end of the input
|
||||
: iterator to the end of the input
|
||||
|
||||
`strict` (in)
|
||||
: whether to expect the input to be consumed until EOF (`#!cpp true` by default)
|
||||
@@ -54,7 +54,7 @@ The exact mapping and its limitations is described on a [dedicated page](../../f
|
||||
## Return value
|
||||
|
||||
deserialized JSON value; in case of a parse error and `allow_exceptions` set to `#!cpp false`, the return value will be
|
||||
`value_t::discarded`. The latter can be checked with [`is_discarded`](is_discarded.md).
|
||||
`value_t::discarded`. The latter can be checked with [`is_discarded`](is_discarded.md).
|
||||
|
||||
## Exception safety
|
||||
|
||||
@@ -63,10 +63,10 @@ Strong guarantee: if an exception is thrown, there are no changes in the JSON va
|
||||
## Exceptions
|
||||
|
||||
- Throws [parse_error.110](../../home/exceptions.md#jsonexceptionparse_error110) if the given input ends prematurely or
|
||||
the end of file was not reached when `strict` was set to true
|
||||
the end of the file was not reached when `strict` was set to true
|
||||
- Throws [parse_error.112](../../home/exceptions.md#jsonexceptionparse_error112) if unsupported features from
|
||||
MessagePack were used in the given input or if the input is not valid MessagePack
|
||||
- Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a string was expected as map key,
|
||||
- Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a string was expected as a map key,
|
||||
but not found
|
||||
|
||||
## Complexity
|
||||
|
||||
@@ -18,7 +18,7 @@ Deserializes a given input to a JSON value using the UBJSON (Universal Binary JS
|
||||
1. Reads from a compatible input.
|
||||
2. Reads from an iterator range.
|
||||
|
||||
The exact mapping and its limitations is described on a [dedicated page](../../features/binary_formats/ubjson.md).
|
||||
The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/ubjson.md).
|
||||
|
||||
## Template parameters
|
||||
|
||||
@@ -40,10 +40,10 @@ The exact mapping and its limitations is described on a [dedicated page](../../f
|
||||
: an input in UBJSON format convertible to an input adapter
|
||||
|
||||
`first` (in)
|
||||
: iterator to start of the input
|
||||
: iterator to the start of the input
|
||||
|
||||
`last` (in)
|
||||
: iterator to end of the input
|
||||
: iterator to the end of the input
|
||||
|
||||
`strict` (in)
|
||||
: whether to expect the input to be consumed until EOF (`#!cpp true` by default)
|
||||
@@ -63,7 +63,7 @@ Strong guarantee: if an exception is thrown, there are no changes in the JSON va
|
||||
## Exceptions
|
||||
|
||||
- Throws [parse_error.110](../../home/exceptions.md#jsonexceptionparse_error110) if the given input ends prematurely or
|
||||
the end of file was not reached when `strict` was set to true
|
||||
the end of the file was not reached when `strict` was set to true
|
||||
- Throws [parse_error.112](../../home/exceptions.md#jsonexceptionparse_error112) if a parse error occurs
|
||||
- Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a string could not be parsed
|
||||
successfully
|
||||
|
||||
@@ -10,8 +10,8 @@ Returns a reference to the first element in the container. For a JSON container
|
||||
|
||||
## Return value
|
||||
|
||||
In case of a structured type (array or object), a reference to the first element is returned. In case of number, string,
|
||||
boolean, or binary values, a reference to the value is returned.
|
||||
In the case of a structured type (array or object), a reference to the first element is returned. In the case of number,
|
||||
string, boolean, or binary values, a reference to the value is returned.
|
||||
|
||||
## Exception safety
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ class basic_json;
|
||||
## Specializations
|
||||
|
||||
- [**json**](../json.md) - default specialization
|
||||
- [**ordered_json**](../ordered_json.md) - specialization that maintains the insertion order of object keys
|
||||
- [**ordered_json**](../ordered_json.md) - a specialization that maintains the insertion order of object keys
|
||||
|
||||
## Iterator invalidation
|
||||
|
||||
@@ -58,8 +58,8 @@ The class satisfies the following concept requirements:
|
||||
|
||||
### Basic
|
||||
|
||||
- [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible): JSON values can be default
|
||||
constructed. The result will be a JSON null value.
|
||||
- [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible): JSON values can be
|
||||
default-constructed. The result will be a JSON null value.
|
||||
- [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible): A JSON value can be constructed
|
||||
from an rvalue argument.
|
||||
- [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible): A JSON value can be
|
||||
@@ -156,9 +156,9 @@ The class satisfies the following concept requirements:
|
||||
- [(constructor)](basic_json.md)
|
||||
- [(destructor)](~basic_json.md)
|
||||
- [**operator=**](operator=.md) - copy assignment
|
||||
- [**array**](array_t.md) (_static_) - explicitly create an array
|
||||
- [**array**](array.md) (_static_) - explicitly create an array
|
||||
- [**binary**](binary.md) (_static_) - explicitly create a binary array
|
||||
- [**object**](object_t.md) (_static_) - explicitly create an object
|
||||
- [**object**](object.md) (_static_) - explicitly create an object
|
||||
|
||||
### Object inspection
|
||||
|
||||
@@ -167,19 +167,24 @@ Functions to inspect the type of a JSON value.
|
||||
- [**type**](type.md) - return the type of the JSON value
|
||||
- [**operator value_t**](operator_value_t.md) - return the type of the JSON value
|
||||
- [**type_name**](type_name.md) - return the type as string
|
||||
- [**is_primitive**](is_primitive.md) - return whether type is primitive
|
||||
- [**is_structured**](is_structured.md) - return whether type is structured
|
||||
- [**is_null**](is_null.md) - return whether value is null
|
||||
- [**is_boolean**](is_boolean.md) - return whether value is a boolean
|
||||
- [**is_number**](is_number.md) - return whether value is a number
|
||||
- [**is_number_integer**](is_number_integer.md) - return whether value is an integer number
|
||||
- [**is_number_unsigned**](is_number_unsigned.md) - return whether value is an unsigned integer number
|
||||
- [**is_number_float**](is_number_float.md) - return whether value is a floating-point number
|
||||
- [**is_object**](is_object.md) - return whether value is an object
|
||||
- [**is_array**](is_array.md) - return whether value is an array
|
||||
- [**is_string**](is_string.md) - return whether value is a string
|
||||
- [**is_binary**](is_binary.md) - return whether value is a binary array
|
||||
- [**is_discarded**](is_discarded.md) - return whether value is discarded
|
||||
- [**is_primitive**](is_primitive.md) - return whether the type is primitive
|
||||
- [**is_structured**](is_structured.md) - return whether the type is structured
|
||||
- [**is_null**](is_null.md) - return whether the value is null
|
||||
- [**is_boolean**](is_boolean.md) - return whether the value is a boolean
|
||||
- [**is_number**](is_number.md) - return whether the value is a number
|
||||
- [**is_number_integer**](is_number_integer.md) - return whether the value is an integer number
|
||||
- [**is_number_unsigned**](is_number_unsigned.md) - return whether the value is an unsigned integer number
|
||||
- [**is_number_float**](is_number_float.md) - return whether the value is a floating-point number
|
||||
- [**is_object**](is_object.md) - return whether the value is an object
|
||||
- [**is_array**](is_array.md) - return whether the value is an array
|
||||
- [**is_string**](is_string.md) - return whether the value is a string
|
||||
- [**is_binary**](is_binary.md) - return whether the value is a binary array
|
||||
- [**is_discarded**](is_discarded.md) - return whether the value is discarded
|
||||
|
||||
Optional functions to access the [diagnostic positions](../macros/json_diagnostic_positions.md).
|
||||
|
||||
- [**start_pos**](start_pos.md) - return the start position of the value
|
||||
- [**end_pos**](end_pos.md) - return the one past the end position of the value
|
||||
|
||||
### Value access
|
||||
|
||||
@@ -232,7 +237,7 @@ Access to the JSON value
|
||||
- [**push_back**](push_back.md) - add a value to an array/object
|
||||
- [**operator+=**](operator+=.md) - add a value to an array/object
|
||||
- [**emplace_back**](emplace_back.md) - add a value to an array
|
||||
- [**emplace**](emplace.md) - add a value to an object if key does not exist
|
||||
- [**emplace**](emplace.md) - add a value to an object if a key does not exist
|
||||
- [**erase**](erase.md) - remove elements
|
||||
- [**insert**](insert.md) - inserts elements
|
||||
- [**update**](update.md) - updates a JSON object from another object, overwriting existing keys
|
||||
|
||||
@@ -18,11 +18,11 @@ iterator insert(const_iterator pos, initializer_list_t ilist);
|
||||
void insert(const_iterator first, const_iterator last);
|
||||
```
|
||||
|
||||
1. Inserts element `val` into array before iterator `pos`.
|
||||
2. Inserts `cnt` copies of `val` into array before iterator `pos`.
|
||||
3. Inserts elements from range `[first, last)` into array before iterator `pos`.
|
||||
4. Inserts elements from initializer list `ilist` into array before iterator `pos`.
|
||||
5. Inserts elements from range `[first, last)` into object.
|
||||
1. Inserts element `val` into an array before iterator `pos`.
|
||||
2. Inserts `cnt` copies of `val` into an array before iterator `pos`.
|
||||
3. Inserts elements from range `[first, last)` into an array before iterator `pos`.
|
||||
4. Inserts elements from initializer list `ilist` into an array before iterator `pos`.
|
||||
5. Inserts elements from range `[first, last)` into an object.
|
||||
|
||||
## Iterator invalidation
|
||||
|
||||
@@ -47,10 +47,10 @@ the same index which is now a different value.
|
||||
: number of copies of `val` to insert
|
||||
|
||||
`first` (in)
|
||||
: begin of the range of elements to insert
|
||||
: the start of the range of elements to insert
|
||||
|
||||
`last` (in)
|
||||
: end of the range of elements to insert
|
||||
: the end of the range of elements to insert
|
||||
|
||||
`ilist` (in)
|
||||
: initializer list to insert the values from
|
||||
@@ -139,7 +139,7 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
||||
--8<-- "examples/insert__count.output"
|
||||
```
|
||||
|
||||
??? example "Example (3): insert range of elements into array"
|
||||
??? example "Example (3): insert a range of elements into an array"
|
||||
|
||||
The example shows how `insert()` is used.
|
||||
|
||||
@@ -153,7 +153,7 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
||||
--8<-- "examples/insert__range.output"
|
||||
```
|
||||
|
||||
??? example "Example (4): insert elements from initializer list into array"
|
||||
??? example "Example (4): insert elements from an initializer list into an array"
|
||||
|
||||
The example shows how `insert()` is used.
|
||||
|
||||
@@ -167,7 +167,7 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
||||
--8<-- "examples/insert__ilist.output"
|
||||
```
|
||||
|
||||
??? example "Example (5): insert range of elements into object"
|
||||
??? example "Example (5): insert a range of elements into an object"
|
||||
|
||||
The example shows how `insert()` is used.
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
constexpr bool is_binary() const noexcept;
|
||||
```
|
||||
|
||||
This function returns `#!cpp true` if and only if the JSON value is binary array.
|
||||
This function returns `#!cpp true` if and only if the JSON value is a binary array.
|
||||
|
||||
## Return value
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ unsigned) and floating-point values.
|
||||
|
||||
## Return value
|
||||
|
||||
`#!cpp true` if type is number (regardless whether integer, unsigned integer or floating-type), `#!cpp false` otherwise.
|
||||
`#!cpp true` if type is number (regardless whether integer, unsigned integer, or floating-type), `#!cpp false` otherwise.
|
||||
|
||||
## Exception safety
|
||||
|
||||
@@ -46,9 +46,9 @@ constexpr bool is_number() const noexcept
|
||||
|
||||
## See also
|
||||
|
||||
- [is_number_integer()](is_number_integer.md) check if value is an integer or unsigned integer number
|
||||
- [is_number_unsigned()](is_number_unsigned.md) check if value is an unsigned integer number
|
||||
- [is_number_float()](is_number_float.md) check if value is a floating-point number
|
||||
- [is_number_integer()](is_number_integer.md) check if the value is an integer or unsigned integer number
|
||||
- [is_number_unsigned()](is_number_unsigned.md) check if the value is an unsigned integer number
|
||||
- [is_number_float()](is_number_float.md) check if the value is a floating-point number
|
||||
|
||||
## Version history
|
||||
|
||||
|
||||
@@ -37,9 +37,9 @@ Constant.
|
||||
|
||||
## See also
|
||||
|
||||
- [is_number()](is_number.md) check if value is a number
|
||||
- [is_number_integer()](is_number_integer.md) check if value is an integer or unsigned integer number
|
||||
- [is_number_unsigned()](is_number_unsigned.md) check if value is an unsigned integer number
|
||||
- [is_number()](is_number.md) check if the value is a number
|
||||
- [is_number_integer()](is_number_integer.md) check if the value is an integer or unsigned integer number
|
||||
- [is_number_unsigned()](is_number_unsigned.md) check if the value is an unsigned integer number
|
||||
|
||||
## Version history
|
||||
|
||||
|
||||
@@ -37,9 +37,9 @@ Constant.
|
||||
|
||||
## See also
|
||||
|
||||
- [is_number()](is_number.md) check if value is a number
|
||||
- [is_number_unsigned()](is_number_unsigned.md) check if value is an unsigned integer number
|
||||
- [is_number_float()](is_number_float.md) check if value is a floating-point number
|
||||
- [is_number()](is_number.md) check if the value is a number
|
||||
- [is_number_unsigned()](is_number_unsigned.md) check if the value is an unsigned integer number
|
||||
- [is_number_float()](is_number_float.md) check if the value is a floating-point number
|
||||
|
||||
## Version history
|
||||
|
||||
|
||||
@@ -37,9 +37,9 @@ Constant.
|
||||
|
||||
## See also
|
||||
|
||||
- [is_number()](is_number.md) check if value is a number
|
||||
- [is_number_integer()](is_number_integer.md) check if value is an integer or unsigned integer number
|
||||
- [is_number_float()](is_number_float.md) check if value is a floating-point number
|
||||
- [is_number()](is_number.md) check if the value is a number
|
||||
- [is_number_integer()](is_number_integer.md) check if the value is an integer or unsigned integer number
|
||||
- [is_number_float()](is_number_float.md) check if the value is a floating-point number
|
||||
|
||||
## Version history
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ The term *primitive* stems from [RFC 8259](https://tools.ietf.org/html/rfc8259):
|
||||
> JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and
|
||||
> arrays).
|
||||
|
||||
This library extends primitive types to binary types, because binary types are roughly comparable to strings. Hence,
|
||||
This library extends primitive types to binary types, because binary types are roughly comparable to strings. Hence,
|
||||
`is_primitive()` returns `#!cpp true` for binary values.
|
||||
|
||||
## Examples
|
||||
@@ -56,12 +56,12 @@ This library extends primitive types to binary types, because binary types are
|
||||
|
||||
## See also
|
||||
|
||||
- [is_structured()](is_structured.md) returns whether JSON value is structured
|
||||
- [is_null()](is_null.md) returns whether JSON value is `null`
|
||||
- [is_string()](is_string.md) returns whether JSON value is a string
|
||||
- [is_boolean()](is_boolean.md) returns whether JSON value is a boolean
|
||||
- [is_number()](is_number.md) returns whether JSON value is a number
|
||||
- [is_binary()](is_binary.md) returns whether JSON value is a binary array
|
||||
- [is_structured()](is_structured.md) returns whether the JSON value is structured
|
||||
- [is_null()](is_null.md) returns whether the JSON value is `null`
|
||||
- [is_string()](is_string.md) returns whether the JSON value is a string
|
||||
- [is_boolean()](is_boolean.md) returns whether the JSON value is a boolean
|
||||
- [is_number()](is_number.md) returns whether the JSON value is a number
|
||||
- [is_binary()](is_binary.md) returns whether the JSON value is a binary array
|
||||
|
||||
## Version history
|
||||
|
||||
|
||||
@@ -55,8 +55,8 @@ Note that though strings are containers in C++, they are treated as primitive va
|
||||
## See also
|
||||
|
||||
- [is_primitive()](is_primitive.md) returns whether JSON value is primitive
|
||||
- [is_array()](is_array.md) returns whether value is an array
|
||||
- [is_object()](is_object.md) returns whether value is an object
|
||||
- [is_array()](is_array.md) returns whether the value is an array
|
||||
- [is_object()](is_object.md) returns whether the value is an object
|
||||
|
||||
## Version history
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ The type used to store JSON numbers (floating-point).
|
||||
> 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
|
||||
known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different
|
||||
types, [`number_integer_t`](number_integer_t.md), [`number_unsigned_t`](number_unsigned_t.md) and `number_float_t` are
|
||||
used.
|
||||
|
||||
@@ -28,9 +28,9 @@ With the default values for `NumberFloatType` (`double`), the default value for
|
||||
|
||||
#### Default behavior
|
||||
|
||||
- The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in floating-point literals will be
|
||||
ignored. Internally, the value will be stored as decimal number. For instance, the C++ floating-point literal `01.2`
|
||||
will be serialized to `1.2`. During deserialization, leading zeros yield an error.
|
||||
- The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in floating-point literals will
|
||||
be ignored. Internally, the value will be stored as a decimal number. For instance, the C++ floating-point literal
|
||||
`01.2` will be serialized to `1.2`. During deserialization, leading zeros yield an error.
|
||||
- Not-a-number (NaN) values will be serialized to `null`.
|
||||
|
||||
#### Limits
|
||||
|
||||
@@ -13,7 +13,7 @@ The type used to store JSON numbers (integers).
|
||||
> 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
|
||||
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`](number_unsigned_t.md) and [`number_float_t`](number_float_t.md) are
|
||||
used.
|
||||
|
||||
@@ -29,9 +29,9 @@ With the default values for `NumberIntegerType` (`std::int64_t`), the default va
|
||||
|
||||
#### Default behavior
|
||||
|
||||
- The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an
|
||||
interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer
|
||||
literal `010` will be serialized to `8`. During deserialization, leading zeros yield an error.
|
||||
- The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an
|
||||
interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++
|
||||
integer literal `010` will be serialized to `8`. During deserialization, leading zeros yield an error.
|
||||
- Not-a-number (NaN) values will be serialized to `null`.
|
||||
|
||||
#### Limits
|
||||
@@ -42,7 +42,7 @@ With the default values for `NumberIntegerType` (`std::int64_t`), the default va
|
||||
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`](number_unsigned_t.md) or [`number_float_t`](number_float_t.md).
|
||||
will automatically be stored as [`number_unsigned_t`](number_unsigned_t.md) or [`number_float_t`](number_float_t.md).
|
||||
|
||||
[RFC 8259](https://tools.ietf.org/html/rfc8259) further states:
|
||||
> Note that when such software is used, numbers that are integers and are in the range $[-2^{53}+1, 2^{53}-1]$ are
|
||||
|
||||
@@ -13,7 +13,7 @@ The type used to store JSON numbers (unsigned).
|
||||
> 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
|
||||
known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different
|
||||
types, [`number_integer_t`](number_integer_t.md), `number_unsigned_t` and [`number_float_t`](number_float_t.md) are
|
||||
used.
|
||||
|
||||
@@ -29,9 +29,9 @@ With the default values for `NumberUnsignedType` (`std::uint64_t`), the default
|
||||
|
||||
#### Default behavior
|
||||
|
||||
- The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an
|
||||
interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer
|
||||
literal `010` will be serialized to `8`. During deserialization, leading zeros yield an error.
|
||||
- The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an
|
||||
interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++
|
||||
integer literal `010` will be serialized to `8`. During deserialization, leading zeros yield an error.
|
||||
- Not-a-number (NaN) values will be serialized to `null`.
|
||||
|
||||
#### Limits
|
||||
@@ -41,7 +41,7 @@ With the default values for `NumberUnsignedType` (`std::uint64_t`), the default
|
||||
|
||||
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
|
||||
when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored
|
||||
as [`number_integer_t`](number_integer_t.md) or [`number_float_t`](number_float_t.md).
|
||||
|
||||
[RFC 8259](https://tools.ietf.org/html/rfc8259) further states:
|
||||
|
||||
@@ -25,7 +25,7 @@ Strong guarantee: if an exception is thrown, there are no changes in the JSON va
|
||||
Throws [`type_error.301`](../../home/exceptions.md#jsonexceptiontype_error301) if `init` is not a list of pairs whose
|
||||
first elements are strings. In this case, no object can be created. When such a value is passed to
|
||||
`basic_json(initializer_list_t, bool, value_t)`, an array would have been created from the passed initializer list
|
||||
`init`. See example below.
|
||||
`init`. See the example below.
|
||||
|
||||
## Complexity
|
||||
|
||||
@@ -34,7 +34,7 @@ Linear in the size of `init`.
|
||||
## Notes
|
||||
|
||||
This function is only added for symmetry reasons. In contrast to the related function `array(initializer_list_t)`, there
|
||||
are no cases which can only be expressed by this function. That is, any initializer list `init` can also be passed to
|
||||
are no cases that can only be expressed by this function. That is, any initializer list `init` can also be passed to
|
||||
the initializer list constructor `basic_json(initializer_list_t, bool, value_t)`.
|
||||
|
||||
## Examples
|
||||
|
||||
@@ -87,8 +87,8 @@ Objects are stored as pointers in a `basic_json` type. That is, for any access t
|
||||
|
||||
#### Object key order
|
||||
|
||||
The order name/value pairs are added to the object is *not* preserved by the library. Therefore, iterating an object may
|
||||
return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in
|
||||
The order name/value pairs are added to the object are *not* preserved by the library. Therefore, iterating an object
|
||||
may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in
|
||||
alphabetical order as `std::map` with `std::less` is used by default. Please note this behavior conforms to
|
||||
[RFC 8259](https://tools.ietf.org/html/rfc8259), because any order implements the specified "unordered" nature of JSON
|
||||
objects.
|
||||
|
||||
@@ -121,4 +121,4 @@ interpreted as `object_t::value_type` or `std::initializer_list<basic_json>`, se
|
||||
|
||||
1. Since version 1.0.0.
|
||||
2. Since version 1.0.0.
|
||||
2. Since version 2.0.0.
|
||||
3. Since version 2.0.0.
|
||||
|
||||
@@ -17,7 +17,7 @@ bool operator<=(ScalarType lhs, const const_reference rhs) noexcept; // (2)
|
||||
operand is `NaN` and the other operand is either `NaN` or any other number.
|
||||
- Otherwise, returns the result of `#!cpp !(rhs < lhs)` (see [**operator<**](operator_lt.md)).
|
||||
|
||||
1. Compares whether a JSON value is less than or equal to a scalar or a scalar is less than or equal
|
||||
2. Compares whether a JSON value is less than or equal to a scalar or a scalar is less than or equal
|
||||
to a JSON value by converting the scalar to a JSON value and comparing both JSON values according
|
||||
to 1.
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ class out_of_range : public exception;
|
||||
```
|
||||
|
||||
This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for
|
||||
instance in case of array indices or nonexisting object keys.
|
||||
instance, in the case of array indices or nonexisting object keys.
|
||||
|
||||
Exceptions have ids 4xx (see [list of out-of-range errors](../../home/exceptions.md#out-of-range)).
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ static basic_json parse(IteratorType first, IteratorType last,
|
||||
1. Deserialize from a compatible input.
|
||||
2. Deserialize from a pair of character iterators
|
||||
|
||||
The `value_type` of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted
|
||||
respectively as UTF-8, UTF-16 and UTF-32.
|
||||
The `value_type` of the iterator must be an integral type with size of 1, 2, or 4 bytes, which will be interpreted
|
||||
respectively as UTF-8, UTF-16, and UTF-32.
|
||||
|
||||
## Template parameters
|
||||
|
||||
@@ -57,10 +57,10 @@ static basic_json parse(IteratorType first, IteratorType last,
|
||||
(`#!cpp false`); (optional, `#!cpp false` by default)
|
||||
|
||||
`first` (in)
|
||||
: iterator to start of character range
|
||||
: iterator to the start of a character range
|
||||
|
||||
`last` (in)
|
||||
: iterator to end of character range
|
||||
: iterator to the end of a character range
|
||||
|
||||
## Return value
|
||||
|
||||
@@ -147,7 +147,7 @@ A UTF-8 byte order mark is silently ignored.
|
||||
--8<-- "examples/parse__contiguouscontainer__parser_callback_t.output"
|
||||
```
|
||||
|
||||
??? example "Parsing from a non null-terminated string"
|
||||
??? example "Parsing from a non-null-terminated string"
|
||||
|
||||
The example below demonstrates the `parse()` function reading from a string that is not null-terminated.
|
||||
|
||||
@@ -199,7 +199,7 @@ A UTF-8 byte order mark is silently ignored.
|
||||
- Added in version 1.0.0.
|
||||
- Overload for contiguous containers (1) added in version 2.0.3.
|
||||
- Ignoring comments via `ignore_comments` added in version 3.9.0.
|
||||
- Changed [runtime assertion](../../features/assertions.md) in case of `FILE*` null pointers to exception in version 3.11.4.
|
||||
- Changed [runtime assertion](../../features/assertions.md) in case of `FILE*` null pointers to exception in version 3.12.0.
|
||||
|
||||
!!! warning "Deprecation"
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
class parse_error : public exception;
|
||||
```
|
||||
|
||||
This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of
|
||||
The library throws this exception when a parse error occurs. Parse errors can occur during the deserialization of
|
||||
JSON text, BSON, CBOR, MessagePack, UBJSON, as well as when using JSON Patch.
|
||||
|
||||
Member `byte` holds the byte index of the last read character in the input file (see note below).
|
||||
|
||||
@@ -37,8 +37,8 @@ Strong guarantee: if an exception is thrown, there are no changes in the JSON va
|
||||
|
||||
## Complexity
|
||||
|
||||
Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is
|
||||
affected by the patch, the complexity can usually be neglected.
|
||||
Linear in the size of the JSON value and the length of the JSON patch. As usually the patch affects only a fraction of
|
||||
the JSON value, the complexity can usually be neglected.
|
||||
|
||||
## Notes
|
||||
|
||||
|
||||
@@ -33,8 +33,8 @@ No guarantees, value may be corrupted by an unsuccessful patch operation.
|
||||
|
||||
## Complexity
|
||||
|
||||
Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is
|
||||
affected by the patch, the complexity can usually be neglected.
|
||||
Linear in the size of the JSON value and the length of the JSON patch. As usually the patch affects only a fraction of
|
||||
the JSON value, the complexity can usually be neglected.
|
||||
|
||||
## Notes
|
||||
|
||||
|
||||
@@ -117,4 +117,4 @@ All functions can throw the following exception:
|
||||
|
||||
1. Since version 1.0.0.
|
||||
2. Since version 1.0.0.
|
||||
2. Since version 2.0.0.
|
||||
3. Since version 2.0.0.
|
||||
|
||||
@@ -23,8 +23,8 @@ Read from input and generate SAX events
|
||||
1. Read from a compatible input.
|
||||
2. Read from a pair of character iterators
|
||||
|
||||
The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted
|
||||
respectively as UTF-8, UTF-16 and UTF-32.
|
||||
The value_type of the iterator must be an integral type with a size of 1, 2, or 4 bytes, which will be interpreted
|
||||
respectively as UTF-8, UTF-16, and UTF-32.
|
||||
|
||||
The SAX event lister must follow the interface of [`json_sax`](../json_sax/index.md).
|
||||
|
||||
@@ -66,10 +66,10 @@ The SAX event lister must follow the interface of [`json_sax`](../json_sax/index
|
||||
(`#!cpp false`); (optional, `#!cpp false` by default)
|
||||
|
||||
`first` (in)
|
||||
: iterator to start of character range
|
||||
: iterator to the start of a character range
|
||||
|
||||
`last` (in)
|
||||
: iterator to end of character range
|
||||
: iterator to the end of a character range
|
||||
|
||||
## Return value
|
||||
|
||||
|
||||
68
external/json/docs/mkdocs/docs/api/basic_json/start_pos.md
vendored
Normal file
68
external/json/docs/mkdocs/docs/api/basic_json/start_pos.md
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
# <small>nlohmann::basic_json::</small>start_pos
|
||||
|
||||
```cpp
|
||||
#if JSON_DIAGNOSTIC_POSITIONS
|
||||
constexpr std::size_t start_pos() const noexcept;
|
||||
#endif
|
||||
```
|
||||
|
||||
Returns the position of the first character in the JSON string from which the value was parsed from.
|
||||
|
||||
| JSON type | return value |
|
||||
|-----------|------------------------------------------------|
|
||||
| object | position of the opening `{` |
|
||||
| array | position of the opening `[` |
|
||||
| string | position of the opening `"` |
|
||||
| number | position of the first character |
|
||||
| boolean | position of `t` for `true` and `f` for `false` |
|
||||
| null | position of `n` |
|
||||
|
||||
## Return value
|
||||
|
||||
the position of the first character of the value in the parsed JSON string, if the value was created by the
|
||||
[`parse`](parse.md) function, or `std::string::npos` if the value was constructed otherwise
|
||||
|
||||
## Exception safety
|
||||
|
||||
No-throw guarantee: this member function never throws exceptions.
|
||||
|
||||
## Complexity
|
||||
|
||||
Constant.
|
||||
|
||||
## Notes
|
||||
|
||||
!!! note "Note"
|
||||
|
||||
The function is only available if macro [`JSON_DIAGNOSTIC_POSITIONS`](../macros/json_diagnostic_positions.md) has
|
||||
been defined to `#!cpp 1` before including the library header.
|
||||
|
||||
!!! warning "Invalidation"
|
||||
|
||||
The returned positions are only valid as long as the JSON value is not changed. The positions are *not* updated
|
||||
when the JSON value is changed.
|
||||
|
||||
## Examples
|
||||
|
||||
??? example "Example"
|
||||
|
||||
```cpp
|
||||
--8<-- "examples/diagnostic_positions.cpp"
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
--8<-- "examples/diagnostic_positions.output"
|
||||
```
|
||||
|
||||
The output shows the start/end positions of all the objects and fields in the JSON string.
|
||||
|
||||
## See also
|
||||
|
||||
- [end_pos](end_pos.md) to access the end position
|
||||
- [JSON_DIAGNOSTIC_POSITIONS](../macros/json_diagnostic_positions.md) for an overview of the diagnostic positions
|
||||
|
||||
## Version history
|
||||
|
||||
- Added in version 3.12.0.
|
||||
@@ -4,13 +4,16 @@
|
||||
// (1)
|
||||
static std::vector<std::uint8_t> to_bjdata(const basic_json& j,
|
||||
const bool use_size = false,
|
||||
const bool use_type = false);
|
||||
const bool use_type = false,
|
||||
const bjdata_version_t version = bjdata_version_t::draft2);
|
||||
|
||||
// (2)
|
||||
static void to_bjdata(const basic_json& j, detail::output_adapter<std::uint8_t> o,
|
||||
const bool use_size = false, const bool use_type = false);
|
||||
const bool use_size = false, const bool use_type = false,
|
||||
const bjdata_version_t version = bjdata_version_t::draft2);
|
||||
static void to_bjdata(const basic_json& j, detail::output_adapter<char> o,
|
||||
const bool use_size = false, const bool use_type = false);
|
||||
const bool use_size = false, const bool use_type = false,
|
||||
const bjdata_version_t version = bjdata_version_t::draft2);
|
||||
```
|
||||
|
||||
Serializes a given JSON value `j` to a byte vector using the BJData (Binary JData) serialization format. BJData aims to
|
||||
@@ -19,7 +22,7 @@ be more compact than JSON itself, yet more efficient to parse.
|
||||
1. Returns a byte vector containing the BJData serialization.
|
||||
2. Writes the BJData serialization to an output adapter.
|
||||
|
||||
The exact mapping and its limitations is described on a [dedicated page](../../features/binary_formats/bjdata.md).
|
||||
The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/bjdata.md).
|
||||
|
||||
## Parameters
|
||||
|
||||
@@ -36,6 +39,10 @@ The exact mapping and its limitations is described on a [dedicated page](../../f
|
||||
: whether to add type annotations to container types (must be combined with `#!cpp use_size = true`); optional,
|
||||
`#!cpp false` by default.
|
||||
|
||||
`version` (in)
|
||||
: which version of BJData to use (see note on "Binary values" on [BJData](../../features/binary_formats/bjdata.md));
|
||||
optional, `#!cpp bjdata_version_t::draft2` by default.
|
||||
|
||||
## Return value
|
||||
|
||||
1. BJData serialization as byte vector
|
||||
@@ -68,3 +75,4 @@ Linear in the size of the JSON value `j`.
|
||||
## Version history
|
||||
|
||||
- Added in version 3.11.0.
|
||||
- BJData version parameter (for draft3 binary encoding) added in version 3.12.0.
|
||||
@@ -15,7 +15,7 @@ so-called document).
|
||||
1. Returns a byte vector containing the BSON serialization.
|
||||
2. Writes the BSON serialization to an output adapter.
|
||||
|
||||
The exact mapping and its limitations is described on a [dedicated page](../../features/binary_formats/bson.md).
|
||||
The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/bson.md).
|
||||
|
||||
## Parameters
|
||||
|
||||
@@ -27,7 +27,7 @@ The exact mapping and its limitations is described on a [dedicated page](../../f
|
||||
|
||||
## Return value
|
||||
|
||||
1. BSON serialization as byte vector
|
||||
1. BSON serialization as a byte vector
|
||||
2. (none)
|
||||
|
||||
## Exception safety
|
||||
|
||||
@@ -10,13 +10,13 @@ static void to_cbor(const basic_json& j, detail::output_adapter<char> o);
|
||||
```
|
||||
|
||||
Serializes a given JSON value `j` to a byte vector using the CBOR (Concise Binary Object Representation) serialization
|
||||
format. CBOR is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to
|
||||
format. CBOR is a binary serialization format that aims to be more compact than JSON itself, yet more efficient to
|
||||
parse.
|
||||
|
||||
1. Returns a byte vector containing the CBOR serialization.
|
||||
2. Writes the CBOR serialization to an output adapter.
|
||||
|
||||
The exact mapping and its limitations is described on a [dedicated page](../../features/binary_formats/cbor.md).
|
||||
The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/cbor.md).
|
||||
|
||||
## Parameters
|
||||
|
||||
@@ -28,7 +28,7 @@ The exact mapping and its limitations is described on a [dedicated page](../../f
|
||||
|
||||
## Return value
|
||||
|
||||
1. CBOR serialization as byte vector
|
||||
1. CBOR serialization as a byte vector
|
||||
2. (none)
|
||||
|
||||
## Exception safety
|
||||
|
||||
@@ -10,12 +10,12 @@ static void to_msgpack(const basic_json& j, detail::output_adapter<char> o);
|
||||
```
|
||||
|
||||
Serializes a given JSON value `j` to a byte vector using the MessagePack serialization format. MessagePack is a binary
|
||||
serialization format which aims to be more compact than JSON itself, yet more efficient to parse.
|
||||
serialization format that aims to be more compact than JSON itself, yet more efficient to parse.
|
||||
|
||||
1. Returns a byte vector containing the MessagePack serialization.
|
||||
2. Writes the MessagePack serialization to an output adapter.
|
||||
|
||||
The exact mapping and its limitations is described on a [dedicated page](../../features/binary_formats/messagepack.md).
|
||||
The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/messagepack.md).
|
||||
|
||||
## Parameters
|
||||
|
||||
@@ -27,7 +27,7 @@ The exact mapping and its limitations is described on a [dedicated page](../../f
|
||||
|
||||
## Return value
|
||||
|
||||
1. MessagePack serialization as byte vector
|
||||
1. MessagePack serialization as a byte vector
|
||||
2. (none)
|
||||
|
||||
## Exception safety
|
||||
|
||||
@@ -19,7 +19,7 @@ aims to be more compact than JSON itself, yet more efficient to parse.
|
||||
1. Returns a byte vector containing the UBJSON serialization.
|
||||
2. Writes the UBJSON serialization to an output adapter.
|
||||
|
||||
The exact mapping and its limitations is described on a [dedicated page](../../features/binary_formats/ubjson.md).
|
||||
The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/ubjson.md).
|
||||
|
||||
## Parameters
|
||||
|
||||
@@ -38,7 +38,7 @@ The exact mapping and its limitations is described on a [dedicated page](../../f
|
||||
|
||||
## Return value
|
||||
|
||||
1. UBJSON serialization as byte vector
|
||||
1. UBJSON serialization as a byte vector
|
||||
2. (none)
|
||||
|
||||
## Exception safety
|
||||
|
||||
@@ -28,11 +28,11 @@ The function can throw the following exceptions:
|
||||
|
||||
## Complexity
|
||||
|
||||
Linear in the size the JSON value.
|
||||
Linear in the size of the JSON value.
|
||||
|
||||
## Notes
|
||||
|
||||
Empty objects and arrays are flattened by [`flatten()`](flatten.md) to `#!json null` values and can not unflattened to
|
||||
Empty objects and arrays are flattened by [`flatten()`](flatten.md) to `#!json null` values and cannot unflattened to
|
||||
their original type. Apart from this example, for a JSON value `j`, the following is always true:
|
||||
`#!cpp j == j.flatten().unflatten()`.
|
||||
|
||||
|
||||
@@ -32,10 +32,10 @@ iterators (including the `end()` iterator) and all references to the elements ar
|
||||
`#!c false`)
|
||||
|
||||
`first` (in)
|
||||
: begin of the range of elements to insert
|
||||
: the beginning of the range of elements to insert
|
||||
|
||||
`last` (in)
|
||||
: end of the range of elements to insert
|
||||
: the end of the range of elements to insert
|
||||
|
||||
## Exceptions
|
||||
|
||||
|
||||
@@ -103,6 +103,30 @@ changes to any JSON value.
|
||||
2. Logarithmic in the size of the container.
|
||||
3. Logarithmic in the size of the container.
|
||||
|
||||
## Notes
|
||||
|
||||
!!! warning "Return type"
|
||||
|
||||
The value function is a template, and the return type of the function is determined by the type of the provided
|
||||
default value unless otherwise specified. This can have unexpected effects. In the example below, we store a 64-bit
|
||||
unsigned integer. We get exactly that value when using [`operator[]`](operator[].md). However, when we call `value`
|
||||
and provide `#!c 0` as default value, then `#!c -1` is returned. The occurs, because `#!c 0` has type `#!c int`
|
||||
which overflows when handling the value `#!c 18446744073709551615`.
|
||||
|
||||
To address this issue, either provide a correctly typed default value or use the template parameter to specify the
|
||||
desired return type. Note that this issue occurs even when a value is stored at the provided key, and the default
|
||||
value is not used as the return value.
|
||||
|
||||
```cpp
|
||||
--8<-- "examples/value__return_type.cpp"
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```json
|
||||
--8<-- "examples/value__return_type.output"
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
??? example "Example: (1) access specified object element with default value"
|
||||
|
||||
@@ -13,9 +13,9 @@ byte_container_with_subtype(const container_type& container, subtype_type subtyp
|
||||
byte_container_with_subtype(container_type&& container, subtype_type subtype);
|
||||
```
|
||||
|
||||
1. Create empty binary container without subtype.
|
||||
2. Create binary container without subtype.
|
||||
3. Create binary container with subtype.
|
||||
1. Create an empty binary container without a subtype.
|
||||
2. Create a binary container without a subtype.
|
||||
3. Create a binary container with a subtype.
|
||||
|
||||
## Parameters
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ void clear_subtype() noexcept;
|
||||
```
|
||||
|
||||
Clears the binary subtype and flags the value as not having a subtype, which has implications for serialization; for
|
||||
instance MessagePack will prefer the bin family over the ext family.
|
||||
instance, MessagePack will prefer the bin family over the ext family.
|
||||
|
||||
## Exception safety
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ class byte_container_with_subtype : public BinaryType;
|
||||
|
||||
This type extends the template parameter `BinaryType` provided to [`basic_json`](../basic_json/index.md) with a subtype
|
||||
used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a
|
||||
specific naming scheme in order to override the binary type.
|
||||
specific naming scheme in order to override the binary type.
|
||||
|
||||
## Template parameters
|
||||
|
||||
@@ -32,4 +32,4 @@ specific naming scheme in order to override the binary type.
|
||||
## Version history
|
||||
|
||||
- Added in version 3.8.0.
|
||||
- Changed type of subtypes to `#!cpp std::uint64_t` in 3.10.0.
|
||||
- Changed the type of subtypes to `#!cpp std::uint64_t` in 3.10.0.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
const string_t& back() const;
|
||||
```
|
||||
|
||||
Return last reference token.
|
||||
Return the last reference token.
|
||||
|
||||
## Return value
|
||||
|
||||
@@ -12,7 +12,7 @@ Last reference token.
|
||||
|
||||
## Exceptions
|
||||
|
||||
Throws [out_of_range.405](../../home/exceptions.md#jsonexceptionout_of_range405) if JSON pointer has no parent.
|
||||
Throws [out_of_range.405](../../home/exceptions.md#jsonexceptionout_of_range405) if the JSON pointer has no parent.
|
||||
|
||||
## Complexity
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
bool empty() const noexcept;
|
||||
```
|
||||
|
||||
Return whether pointer points to the root document.
|
||||
Return whether the pointer points to the root document.
|
||||
|
||||
## Return value
|
||||
|
||||
|
||||
@@ -34,10 +34,10 @@ are the base for JSON patches.
|
||||
- [**operator/=**](operator_slasheq.md) - append to the end of the JSON pointer
|
||||
- [**operator/**](operator_slash.md) - create JSON Pointer by appending
|
||||
- [**parent_pointer**](parent_pointer.md) - returns the parent of this JSON pointer
|
||||
- [**pop_back**](pop_back.md) - remove last reference token
|
||||
- [**pop_back**](pop_back.md) - remove the last reference token
|
||||
- [**back**](back.md) - return last reference token
|
||||
- [**push_back**](push_back.md) - append an unescaped token at the end of the pointer
|
||||
- [**empty**](empty.md) - return whether pointer points to the root document
|
||||
- [**empty**](empty.md) - return whether the pointer points to the root document
|
||||
|
||||
## Literals
|
||||
|
||||
|
||||
@@ -42,6 +42,10 @@ operator string_t() const
|
||||
--8<-- "examples/json_pointer__operator_string_t.output"
|
||||
```
|
||||
|
||||
## See also
|
||||
|
||||
- [string_t](../basic_json/string_t.md)- type for strings
|
||||
|
||||
## Version history
|
||||
|
||||
- Since version 2.0.0.
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
void pop_back();
|
||||
```
|
||||
|
||||
Remove last reference token.
|
||||
Remove the last reference token.
|
||||
|
||||
## Exceptions
|
||||
|
||||
Throws [out_of_range.405](../../home/exceptions.md#jsonexceptionout_of_range405) if JSON pointer has no parent.
|
||||
Throws [out_of_range.405](../../home/exceptions.md#jsonexceptionout_of_range405) if the JSON pointer has no parent.
|
||||
|
||||
## Complexity
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ processing the input.
|
||||
## Member types
|
||||
|
||||
- [**number_integer_t**](../basic_json/number_integer_t.md) - `BasicJsonType`'s type for numbers (integer)
|
||||
- [**number_unsigned_t**](../basic_json/number_unsigned_t.md) - `BasicJsonType`'s type for numbers (unsigned)
|
||||
- [**number_unsigned_t**](../basic_json/number_unsigned_t.md) - `BasicJsonType`'s type for numbers (unsigned)
|
||||
- [**number_float_t**](../basic_json/number_float_t.md) - `BasicJsonType`'s type for numbers (floating-point)
|
||||
- [**string_t**](../basic_json/string_t.md) - `BasicJsonType`'s type for strings
|
||||
- [**binary_t**](../basic_json/binary_t.md) - `BasicJsonType`'s type for binary arrays
|
||||
|
||||
@@ -11,6 +11,7 @@ header. See also the [macro overview page](../../features/macros.md).
|
||||
|
||||
- [**JSON_CATCH_USER(exception)**<br>**JSON_THROW_USER(exception)**<br>**JSON_TRY_USER**](json_throw_user.md) - control exceptions
|
||||
- [**JSON_DIAGNOSTICS**](json_diagnostics.md) - control extended diagnostics
|
||||
- [**JSON_DIAGNOSTIC_POSITIONS**](json_diagnostic_positions.md) - access positions of elements
|
||||
- [**JSON_NOEXCEPTION**](json_noexception.md) - switch off exceptions
|
||||
|
||||
## Language support
|
||||
@@ -49,27 +50,34 @@ header. See also the [macro overview page](../../features/macros.md).
|
||||
|
||||
## Serialization/deserialization macros
|
||||
|
||||
- Enum: [**NLOHMANN_JSON_SERIALIZE_ENUM**](nlohmann_json_serialize_enum.md)
|
||||
- Class/struct:
|
||||
- Do you need to serialize private variables?
|
||||
- Yes? Do you only need serialization?
|
||||
- Yes? `NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE`
|
||||
- No? Allow deserialization of JSON values with missing values?
|
||||
- Yes? `NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT`
|
||||
- No? `NLOHMANN_DEFINE_TYPE_INTRUSIVE`
|
||||
- No? Do you only need serialization?
|
||||
- Yes? `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE`
|
||||
- No? Allow deserialization of JSON values with missing values?
|
||||
- Yes? `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT`
|
||||
- No? `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE`
|
||||
### Enums
|
||||
|
||||
- [**NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)**<br>**NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...)**
|
||||
<br>**NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...)**][DefInt]
|
||||
\- serialization/deserialization of types _with_ access to private variables
|
||||
- [**NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)**<br>**NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...)**
|
||||
<br>**NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...)**][DefNonInt]
|
||||
\- serialization/deserialization of types _without_ access to private variables
|
||||
- [**NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)**](nlohmann_json_serialize_enum.md) - serialization/deserialization of enum types
|
||||
- [**NLOHMANN_JSON_SERIALIZE_ENUM**](nlohmann_json_serialize_enum.md) - serialize/deserialize an enum
|
||||
|
||||
[DefInt]: nlohmann_define_type_intrusive.md
|
||||
[DefNonInt]: nlohmann_define_type_non_intrusive.md
|
||||
### Classes and structs
|
||||
|
||||
- [**NLOHMANN_DEFINE_TYPE_INTRUSIVE**](nlohmann_define_type_intrusive.md) - serialize/deserialize a non-derived class
|
||||
with private members
|
||||
- [**NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT**](nlohmann_define_type_intrusive.md) - serialize/deserialize a
|
||||
non-derived class with private members; uses default values
|
||||
- [**NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE**](nlohmann_define_type_intrusive.md) - serialize a non-derived class
|
||||
with private members
|
||||
- [**NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE**](nlohmann_define_type_non_intrusive.md) - serialize/deserialize a non-derived
|
||||
class
|
||||
- [**NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT**](nlohmann_define_type_non_intrusive.md) - serialize/deserialize a
|
||||
non-derived class; uses default values
|
||||
- [**NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE**](nlohmann_define_type_non_intrusive.md) - serialize a
|
||||
non-derived class
|
||||
|
||||
- [**NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE**](nlohmann_define_derived_type.md) - serialize/deserialize a derived class
|
||||
with private members
|
||||
- [**NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT**](nlohmann_define_derived_type.md) - serialize/deserialize a
|
||||
derived class with private members; uses default values
|
||||
- [**NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE**](nlohmann_define_derived_type.md) - serialize a derived
|
||||
class with private members
|
||||
- [**NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE**](nlohmann_define_derived_type.md) - serialize/deserialize a derived
|
||||
class
|
||||
- [**NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT**](nlohmann_define_derived_type.md) - serialize/deserialize
|
||||
a derived class; uses default values
|
||||
- [**NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE**](nlohmann_define_derived_type.md) - serialize a derived
|
||||
class
|
||||
|
||||
@@ -9,7 +9,7 @@ This macro controls which code is executed for [runtime assertions](../../featur
|
||||
## Parameters
|
||||
|
||||
`x` (in)
|
||||
: expression of scalar type
|
||||
: expression of a scalar type
|
||||
|
||||
## Default definition
|
||||
|
||||
@@ -79,6 +79,10 @@ Therefore, assertions can be switched off by defining `NDEBUG`.
|
||||
assertion error in operator[]
|
||||
```
|
||||
|
||||
## See also
|
||||
|
||||
- [Runtime Assertions](../../features/assertions.md) - overview documentation
|
||||
|
||||
## Version history
|
||||
|
||||
- Added in version 3.9.0.
|
||||
|
||||
@@ -6,22 +6,34 @@
|
||||
|
||||
This macro enables position diagnostics for generated JSON objects.
|
||||
|
||||
When enabled, two new properties: `start_pos()` and `end_pos()` are added to `nlohmann::basic_json` objects and fields. `start_pos()` returns the start
|
||||
position of that JSON object/field in the original string the object was parsed from. Likewise, `end_pos()` returns the end position of that JSON
|
||||
object/field in the original string the object was parsed from.
|
||||
When enabled, two new member functions [`start_pos()`](../basic_json/start_pos.md) and
|
||||
[`end_pos()`](../basic_json/end_pos.md) are added to [`basic_json`](../basic_json/index.md) values. If the value was
|
||||
created by calling the[`parse`](../basic_json/parse.md) function, then these functions allow querying the byte positions
|
||||
of the value in the input it was parsed from. In case the value was constructed by other means, `std::string::npos` is
|
||||
returned.
|
||||
|
||||
`start_pos()` returns the first character of a given element in the original JSON string, while `end_pos()` returns the character following the last
|
||||
character. For objects and arrays, the first and last characters correspond to the opening or closing braces/brackets, respectively. For fields, the first
|
||||
and last character represent the opening and closing quotes or the first and last character of the field's numerical or predefined value
|
||||
(true/false/null), respectively.
|
||||
[`start_pos()`](../basic_json/start_pos.md) returns the position of the first character of a given value in the original
|
||||
JSON string, while [`end_pos()`](../basic_json/end_pos.md) returns the position of the character _following_ the last
|
||||
character. For objects and arrays, the first and last characters correspond to the opening or closing braces/brackets,
|
||||
respectively. For primitive values, the first and last character represents the opening and closing quotes (strings) or
|
||||
the first and last character of the field's numerical or predefined value (`true`, `false`, `null`), respectively.
|
||||
|
||||
Given the above, `end_pos() - start_pos()` for an object or field provides the length of the string representation for that object or field, including the
|
||||
opening or closing braces, brackets, or quotes.
|
||||
| JSON type | return value [`start_pos()`](../basic_json/start_pos.md) | return value [`end_pos()`](../basic_json/end_pos.md) |
|
||||
|-----------|----------------------------------------------------------|------------------------------------------------------|
|
||||
| object | position of the opening `{` | position after the closing `}` |
|
||||
| array | position of the opening `[` | position after the closing `]` |
|
||||
| string | position of the opening `"` | position after the closing `"` |
|
||||
| number | position of the first character | position after the last character |
|
||||
| boolean | position of `t` for `true` and `f` for `false` | position after `e` |
|
||||
| null | position of `n` | position after `l` |
|
||||
|
||||
`start_pos()` and `end_pos()` are only set if the JSON object was parsed using `parse()`. For all other cases, `std::string::npos` will be returned.
|
||||
Given the above, [`end_pos()`](../basic_json/end_pos.md)` - `[`start_pos()`](../basic_json/start_pos.md) for a JSON
|
||||
value provides the length of the parsed JSON string for that value, including the opening or closing braces, brackets,
|
||||
or quotes.
|
||||
|
||||
Note that enabling this macro increases the size of every JSON value by two `std::size_t` fields and adds
|
||||
slight runtime overhead.
|
||||
Note that enabling this macro increases the size of every JSON value by two `std::size_t` fields and adds slight runtime
|
||||
overhead to parsing, copying JSON value objects, and the generation of error messages for exceptions. It also causes
|
||||
these values to be reported in those error messages.
|
||||
|
||||
## Default definition
|
||||
|
||||
@@ -35,15 +47,27 @@ When the macro is not defined, the library will define it to its default value.
|
||||
|
||||
## Notes
|
||||
|
||||
!!! hint "CMake option"
|
||||
!!! note "CMake option"
|
||||
|
||||
Diagnostic messages can also be controlled with the CMake option
|
||||
Diagnostic positions can also be controlled with the CMake option
|
||||
[`JSON_Diagnostic_Positions`](../../integration/cmake.md#json_diagnostic_positions) (`OFF` by default)
|
||||
which defines `JSON_DIAGNOSTIC_POSITIONS` accordingly.
|
||||
|
||||
!!! note "Availability"
|
||||
|
||||
Diagnostic positions are only available if the value was created by the [`parse`](../basic_json/parse.md) function.
|
||||
The [`sax_parse`](../basic_json/sax_parse.md) function or all other means to create a JSON value **do not** set the
|
||||
diagnostic positions and [`start_pos()`](../basic_json/start_pos.md) and [`end_pos()`](../basic_json/end_pos.md)
|
||||
will only return `std::string::npos` for these values.
|
||||
|
||||
!!! warning "Invalidation"
|
||||
|
||||
The returned positions are only valid as long as the JSON value is not changed. The positions are *not* updated
|
||||
when the JSON value is changed.
|
||||
|
||||
## Examples
|
||||
|
||||
??? example "Example 1: retrieving positions"
|
||||
??? example "Example: retrieving positions"
|
||||
|
||||
```cpp
|
||||
--8<-- "examples/diagnostic_positions.cpp"
|
||||
@@ -57,5 +81,39 @@ When the macro is not defined, the library will define it to its default value.
|
||||
|
||||
The output shows the start/end positions of all the objects and fields in the JSON string.
|
||||
|
||||
??? example "Example 2: using only diagnostic positions in exceptions"
|
||||
|
||||
```cpp
|
||||
--8<-- "examples/diagnostic_positions_exception.cpp"
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
--8<-- "examples/diagnostic_positions_exception.output"
|
||||
```
|
||||
|
||||
The output shows the exception with start/end positions only.
|
||||
|
||||
??? example "Example 3: using extended diagnostics with positions enabled in exceptions"
|
||||
|
||||
```cpp
|
||||
--8<-- "examples/diagnostics_extended_positions.cpp"
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
--8<-- "examples/diagnostics_extended_positions.output"
|
||||
```
|
||||
|
||||
The output shows the exception with diagnostic path info and start/end positions.
|
||||
|
||||
## See also
|
||||
|
||||
- [:simple-cmake: JSON_Diagnostic_Positions](../../integration/cmake.md#json_diagnostic_positions) - CMake option to control the macro
|
||||
- [JSON_DIAGNOSTICS](json_diagnostics.md) - macro to control extended diagnostics
|
||||
|
||||
## Version history
|
||||
|
||||
- Added in version 3.12.0.
|
||||
|
||||
@@ -9,7 +9,7 @@ Possible values are `1` to enable or `0` to disable (default).
|
||||
|
||||
When enabled, exception messages contain a [JSON Pointer](../json_pointer/json_pointer.md) to the JSON value that
|
||||
triggered the exception. Note that enabling this macro increases the size of every JSON value by one pointer and adds
|
||||
some runtime overhead.
|
||||
some runtime overhead.
|
||||
|
||||
## Default definition
|
||||
|
||||
@@ -70,7 +70,25 @@ When the macro is not defined, the library will define it to its default value.
|
||||
|
||||
Now the exception message contains a JSON Pointer `/address/housenumber` that indicates which value has the wrong type.
|
||||
|
||||
??? example "Example 3: using only diagnostic positions in exceptions"
|
||||
|
||||
```cpp
|
||||
--8<-- "examples/diagnostic_positions_exception.cpp"
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
--8<-- "examples/diagnostic_positions_exception.output"
|
||||
```
|
||||
The output shows the exception with start/end positions only.
|
||||
|
||||
## See also
|
||||
|
||||
- [:simple-cmake: JSON_Diagnostics](../../integration/cmake.md#json_diagnostics) - CMake option to control the macro
|
||||
- [JSON_DIAGNOSTIC_POSITIONS](json_diagnostic_positions.md) - macro to access positions of elements
|
||||
|
||||
## Version history
|
||||
|
||||
- Added in version 3.10.0.
|
||||
- As of version 3.11.0 the definition is allowed to vary between translation units.
|
||||
- As of version 3.11.0, the definition is allowed to vary between translation units.
|
||||
|
||||
@@ -145,7 +145,9 @@ The default value is `0`.
|
||||
|
||||
## See also
|
||||
|
||||
- [`NLOHMANN_JSON_SERIALIZE_ENUM`](nlohmann_json_serialize_enum.md)
|
||||
- [:simple-cmake: JSON_DisableEnumSerialization](../../integration/cmake.md#json_disableenumserialization) - CMake option to control
|
||||
the macro
|
||||
- [`NLOHMANN_JSON_SERIALIZE_ENUM`](nlohmann_json_serialize_enum.md) - serialize/deserialize an enum
|
||||
|
||||
## Version history
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
#define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK
|
||||
```
|
||||
|
||||
When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to
|
||||
use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.
|
||||
When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows
|
||||
using the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.
|
||||
|
||||
## Default definition
|
||||
|
||||
|
||||
@@ -92,6 +92,7 @@ When the macro is not defined, the library will define it to its default value.
|
||||
|
||||
- [`operator""_json`](../operator_literal_json.md)
|
||||
- [`operator""_json_pointer`](../operator_literal_json_pointer.md)
|
||||
- [:simple-cmake: JSON_GlobalUDLs](../../integration/cmake.md#json_globaludls) - CMake option to control the macro
|
||||
|
||||
## Version history
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@ By default, implicit conversions are enabled.
|
||||
|
||||
- [**operator ValueType**](../basic_json/operator_ValueType.md) - get a value (implicit)
|
||||
- [**get**](../basic_json/get.md) - get a value (explicit)
|
||||
- [:simple-cmake: JSON_ImplicitConversions](../../integration/cmake.md#json_implicitconversions) - CMake option to control the macro
|
||||
|
||||
## Version history
|
||||
|
||||
|
||||
@@ -72,6 +72,10 @@ When the macro is not defined, the library will define it to its default value.
|
||||
...
|
||||
```
|
||||
|
||||
### See also
|
||||
|
||||
- [:simple-cmake: JSON_LegacyDiscardedValueComparison](../../integration/cmake.md#json_legacydiscardedvaluecomparison) - CMake option to control the macro
|
||||
|
||||
## Version history
|
||||
|
||||
- Added in version 3.11.0.
|
||||
|
||||
@@ -3,34 +3,51 @@
|
||||
NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE</h1>
|
||||
|
||||
```cpp
|
||||
#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...) // (1)
|
||||
#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...) // (2)
|
||||
#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...) // (3)
|
||||
// (1)
|
||||
#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...)
|
||||
// (2)
|
||||
#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)
|
||||
// (3)
|
||||
#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)
|
||||
|
||||
#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(type, base_type, member...) // (4)
|
||||
#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, base_type, member...) // (5)
|
||||
#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...) // (6)
|
||||
// (4)
|
||||
#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(type, base_type, member...)
|
||||
// (5)
|
||||
#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)
|
||||
// (6)
|
||||
#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)
|
||||
```
|
||||
|
||||
These macros can be used to simplify the serialization/deserialization of derived types if you want to use a JSON
|
||||
object as serialization and want to use the member variable names as object keys in that object.
|
||||
|
||||
- Macros 1, 2 and 3 are to be defined **inside** the class/struct to create code for.
|
||||
- Macros 1, 2, and 3 are to be defined **inside** the class/struct to create code for.
|
||||
Like [`NLOHMANN_DEFINE_TYPE_INTRUSIVE`](nlohmann_define_type_intrusive.md), they can access private members.
|
||||
- Macros 4, 5 and 6 are to be defined **outside** the class/struct to create code for, but **inside** its namespace.
|
||||
- Macros 4, 5, and 6 are to be defined **outside** the class/struct to create code for, but **inside** its namespace.
|
||||
Like [`NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE`](nlohmann_define_type_non_intrusive.md),
|
||||
they **cannot** access private members.
|
||||
|
||||
The first parameter is the name of the derived class/struct,
|
||||
The first parameter is the name of the derived class/struct,
|
||||
the second parameter is the name of the base class/struct and all remaining parameters name the members.
|
||||
The base type **must** be already serializable/deserializable.
|
||||
|
||||
- Macros 1 and 3 will use [`at`](../basic_json/at.md) during deserialization and will throw
|
||||
- Macros 1 and 4 will use [`at`](../basic_json/at.md) during deserialization and will throw
|
||||
[`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if a key is missing in the JSON object.
|
||||
- Macros 2 and 4 will use [`value`](../basic_json/value.md) during deserialization and fall back to the default value for the
|
||||
- Macros 2 and 5 will use [`value`](../basic_json/value.md) during deserialization and fall back to the default value for the
|
||||
respective type of the member variable if a key in the JSON object is missing. The generated `from_json()` function
|
||||
default constructs an object and uses its values as the defaults when calling the `value` function.
|
||||
|
||||
Summary:
|
||||
|
||||
| Need access to private members | Need only de-serialization | Allow missing values when de-serializing | macro |
|
||||
|------------------------------------------------------------------|------------------------------------------------------------------|------------------------------------------------------------------|---------------------------------------------------------------|
|
||||
| <div style="color: green;">:octicons-check-circle-fill-24:</div> | <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: red;">:octicons-x-circle-fill-24:</div> | **NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE** |
|
||||
| <div style="color: green;">:octicons-check-circle-fill-24:</div> | <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: green;">:octicons-check-circle-fill-24:</div> | **NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT** |
|
||||
| <div style="color: green;">:octicons-check-circle-fill-24:</div> | <div style="color: green;">:octicons-check-circle-fill-24:</div> | <div style="color: grey;">:octicons-skip-fill-24:</div> | **NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE** |
|
||||
| <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: red;">:octicons-x-circle-fill-24:</div> | **NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE** |
|
||||
| <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: green;">:octicons-check-circle-fill-24:</div> | **NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT** |
|
||||
| <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: green;">:octicons-check-circle-fill-24:</div> | <div style="color: grey;">:octicons-skip-fill-24:</div> | **NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE** |
|
||||
|
||||
## Parameters
|
||||
|
||||
`type` (in)
|
||||
@@ -40,55 +57,63 @@ The base type **must** be already serializable/deserializable.
|
||||
: name of the base type (class, struct) `type` is derived from
|
||||
|
||||
`member` (in)
|
||||
: name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list
|
||||
: name of the member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list
|
||||
|
||||
## Default definition
|
||||
|
||||
Macros 1 and 2 add two friend functions to the class which take care of the serialization and deserialization:
|
||||
|
||||
```cpp
|
||||
friend void to_json(nlohmann::json&, const type&);
|
||||
friend void from_json(const nlohmann::json&, type&);
|
||||
template<typename BasicJsonType>
|
||||
friend void to_json(BasicJsonType&, const type&);
|
||||
template<typename BasicJsonType>
|
||||
friend void from_json(const BasicJsonType&, type&);
|
||||
```
|
||||
|
||||
Macros 4 and 5 add two functions to the namespace which take care of the serialization and deserialization:
|
||||
|
||||
```cpp
|
||||
void to_json(nlohmann::json&, const type&);
|
||||
void from_json(const nlohmann::json&, type&);
|
||||
template<typename BasicJsonType>
|
||||
void to_json(BasicJsonType&, const type&);
|
||||
template<typename BasicJsonType>
|
||||
void from_json(const BasicJsonType&, type&);
|
||||
```
|
||||
|
||||
Macros 3 and 6 add one function to the namespace which take care of the serialization only:
|
||||
Macros 3 and 6 add one function to the namespace which takes care of the serialization only:
|
||||
|
||||
```cpp
|
||||
void to_json(nlohmann::json&, const type&);
|
||||
template<typename BasicJsonType>
|
||||
void to_json(BasicJsonType&, const type&);
|
||||
```
|
||||
|
||||
In first two cases cases they call the `to_json`/`from_json` functions of the base type
|
||||
In first two cases, they call the `to_json`/`from_json` functions of the base type
|
||||
before serializing/deserializing the members of the derived type:
|
||||
|
||||
```cpp
|
||||
class A { /* ... */ };
|
||||
class B : public A { /* ... */ };
|
||||
|
||||
void to_json(nlohmann::json& j, const B& b) {
|
||||
template<typename BasicJsonType>
|
||||
void to_json(BasicJsonType& j, const B& b) {
|
||||
nlohmann::to_json(j, static_cast<const A&>(b));
|
||||
// ...
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json& j, B& b) {
|
||||
template<typename BasicJsonType>
|
||||
void from_json(const BasicJsonType& j, B& b) {
|
||||
nlohmann::from_json(j, static_cast<A&>(b));
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
In the third case only `to_json` will be called:
|
||||
In the third case, only `to_json` will be called:
|
||||
|
||||
```cpp
|
||||
class A { /* ... */ };
|
||||
class B : public A { /* ... */ };
|
||||
|
||||
void to_json(nlohmann::json& j, const B& b) {
|
||||
template<typename BasicJsonType>
|
||||
void to_json(BasicJsonType& j, const B& b) {
|
||||
nlohmann::to_json(j, static_cast<const A&>(b));
|
||||
// ...
|
||||
}
|
||||
@@ -98,40 +123,55 @@ void to_json(nlohmann::json& j, const B& b) {
|
||||
|
||||
!!! info "Prerequisites"
|
||||
|
||||
- Macros 1, 2 and 3 have the same prerequisites of NLOHMANN_DEFINE_TYPE_INTRUSIVE.
|
||||
- Macros 4, 5 and 6 have the same prerequisites of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
|
||||
- Macros 1, 2, and 3 have the same prerequisites of [NLOHMANN_DEFINE_TYPE_INTRUSIVE](nlohmann_define_type_intrusive.md).
|
||||
- Macros 4, 5, and 6 have the same prerequisites of [NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE](nlohmann_define_type_non_intrusive.md).
|
||||
- Serialization/deserialization of base types must be defined.
|
||||
|
||||
!!! warning "Implementation limits"
|
||||
|
||||
- See Implementation limits for NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
|
||||
See Implementation limits for [NLOHMANN_DEFINE_TYPE_INTRUSIVE](nlohmann_define_type_intrusive.md) and
|
||||
[NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE](nlohmann_define_type_non_intrusive.md), respectively.
|
||||
|
||||
## Examples
|
||||
|
||||
Example of `NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE` usage:
|
||||
??? example "NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE"
|
||||
|
||||
```cpp
|
||||
class A {
|
||||
double Aa;
|
||||
double Ab;
|
||||
NLOHMANN_DEFINE_TYPE_INTRUSIVE(A, Aa, Ab)
|
||||
};
|
||||
Consider the following complete example:
|
||||
|
||||
class B : public A {
|
||||
int Ba;
|
||||
int Bb;
|
||||
NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(B, A, Ba, Bb)
|
||||
};
|
||||
```
|
||||
```cpp hl_lines="28"
|
||||
--8<-- "examples/nlohmann_define_derived_type_intrusive_macro.cpp"
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```json
|
||||
--8<-- "examples/nlohmann_define_derived_type_intrusive_macro.output"
|
||||
```
|
||||
|
||||
Notes:
|
||||
|
||||
- `A` and `B` are default-constructible. This is a requirement for using the macro.
|
||||
- `A` has private members and is not a derived class. Hence, macro `NLOHMANN_DEFINE_TYPE_INTRUSIVE` is used.
|
||||
- As `B` is a derived class, `NLOHMANN_DEFINE_TYPE_INTRUSIVE` is not applicable, but
|
||||
`NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE` must be used.
|
||||
- The macro `NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE` is used _inside_ the class use as
|
||||
`NLOHMANN_DEFINE_TYPE_INTRUSIVE`.
|
||||
|
||||
## See also
|
||||
|
||||
- [NLOHMANN_DEFINE_TYPE_INTRUSIVE / NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT](nlohmann_define_type_intrusive.md)
|
||||
- [NLOHMANN_DEFINE_TYPE_INTRUSIVE / NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT /
|
||||
NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE](nlohmann_define_type_intrusive.md)
|
||||
for similar macros that can be defined _inside_ a non-derived type.
|
||||
- [NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE / NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT](nlohmann_define_type_non_intrusive.md)
|
||||
- [NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE / NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT /
|
||||
NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE](nlohmann_define_type_non_intrusive.md)
|
||||
for similar macros that can be defined _outside_ a non-derived type.
|
||||
- [Arbitrary Type Conversions](../../features/arbitrary_types.md) for an overview.
|
||||
|
||||
## Version history
|
||||
|
||||
1. Added in version 3.11.x.
|
||||
1. Added in version 3.12.0.
|
||||
2. Added in version 3.12.0.
|
||||
3. Added in version 3.12.0.
|
||||
4. Added in version 3.12.0.
|
||||
5. Added in version 3.12.0.
|
||||
6. Added in version 3.12.0.
|
||||
|
||||
@@ -17,7 +17,15 @@ parameter is the name of the class/struct, and all remaining parameters name the
|
||||
2. Will use [`value`](../basic_json/value.md) during deserialization and fall back to the default value for the
|
||||
respective type of the member variable if a key in the JSON object is missing. The generated `from_json()` function
|
||||
default constructs an object and uses its values as the defaults when calling the `value` function.
|
||||
3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.
|
||||
3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization is required.
|
||||
|
||||
Summary:
|
||||
|
||||
| Need access to private members | Need only de-serialization | Allow missing values when de-serializing | macro |
|
||||
|------------------------------------------------------------------|------------------------------------------------------------------|------------------------------------------------------------------|-------------------------------------------------------|
|
||||
| <div style="color: green;">:octicons-check-circle-fill-24:</div> | <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: red;">:octicons-x-circle-fill-24:</div> | **NLOHMANN_DEFINE_TYPE_INTRUSIVE** |
|
||||
| <div style="color: green;">:octicons-check-circle-fill-24:</div> | <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: green;">:octicons-check-circle-fill-24:</div> | **NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT** |
|
||||
| <div style="color: green;">:octicons-check-circle-fill-24:</div> | <div style="color: green;">:octicons-check-circle-fill-24:</div> | <div style="color: grey;">:octicons-skip-fill-24:</div> | **NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE** |
|
||||
|
||||
## Parameters
|
||||
|
||||
@@ -25,15 +33,17 @@ parameter is the name of the class/struct, and all remaining parameters name the
|
||||
: name of the type (class, struct) to serialize/deserialize
|
||||
|
||||
`member` (in)
|
||||
: name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list
|
||||
: name of the member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list
|
||||
|
||||
## Default definition
|
||||
|
||||
The macros add two friend functions to the class which take care of the serialization and deserialization:
|
||||
|
||||
```cpp
|
||||
friend void to_json(nlohmann::json&, const type&);
|
||||
friend void from_json(const nlohmann::json&, type&); // except (3)
|
||||
template<typename BasicJsonType>
|
||||
friend void to_json(BasicJsonType&, const type&);
|
||||
template<typename BasicJsonType>
|
||||
friend void from_json(const BasicJsonType&, type&); // except (3)
|
||||
```
|
||||
|
||||
See examples below for the concrete generated code.
|
||||
@@ -52,8 +62,6 @@ See examples below for the concrete generated code.
|
||||
|
||||
- The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types
|
||||
with more than 64 member variables, you need to define the `to_json`/`from_json` functions manually.
|
||||
- The macros only work for the [`nlohmann::json`](../json.md) type; other specializations such as
|
||||
[`nlohmann::ordered_json`](../ordered_json.md) are currently unsupported.
|
||||
|
||||
## Examples
|
||||
|
||||
@@ -82,7 +90,7 @@ See examples below for the concrete generated code.
|
||||
|
||||
The macro is equivalent to:
|
||||
|
||||
```cpp hl_lines="22 23 24 25 26 27 28 29 30 31 32 33 34"
|
||||
```cpp hl_lines="22 23 24 25 26 27 28 29 30 31 32 33 34 35 36"
|
||||
--8<-- "examples/nlohmann_define_type_intrusive_explicit.cpp"
|
||||
```
|
||||
|
||||
@@ -110,7 +118,7 @@ See examples below for the concrete generated code.
|
||||
|
||||
The macro is equivalent to:
|
||||
|
||||
```cpp hl_lines="22 23 24 25 26 27 28 29 30 31 32 33 34 35"
|
||||
```cpp hl_lines="22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37"
|
||||
--8<-- "examples/nlohmann_define_type_intrusive_with_default_explicit.cpp"
|
||||
```
|
||||
|
||||
@@ -139,18 +147,24 @@ See examples below for the concrete generated code.
|
||||
|
||||
The macro is equivalent to:
|
||||
|
||||
```cpp hl_lines="22 22 23 24 25 26 27"
|
||||
```cpp hl_lines="22 22 23 24 25 26 27 28"
|
||||
--8<-- "examples/nlohmann_define_type_intrusive_only_serialize_explicit.cpp"
|
||||
```
|
||||
|
||||
## See also
|
||||
|
||||
- [NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE{_WITH_DEFAULT, _ONLY_SERIALIZE}](nlohmann_define_type_non_intrusive.md)
|
||||
- [NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT,
|
||||
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE](nlohmann_define_type_non_intrusive.md)
|
||||
for a similar macro that can be defined _outside_ the type.
|
||||
- [NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT,
|
||||
NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE,
|
||||
NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT,
|
||||
NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE](nlohmann_define_derived_type.md) for similar macros for
|
||||
derived types
|
||||
- [Arbitrary Type Conversions](../../features/arbitrary_types.md) for an overview.
|
||||
|
||||
## Version history
|
||||
|
||||
1. Added in version 3.9.0.
|
||||
2. Added in version 3.11.0.
|
||||
3. Added in version TODO.
|
||||
3. Added in version 3.11.3.
|
||||
|
||||
@@ -17,7 +17,15 @@ parameter is the name of the class/struct, and all remaining parameters name the
|
||||
2. Will use [`value`](../basic_json/value.md) during deserialization and fall back to the default value for the
|
||||
respective type of the member variable if a key in the JSON object is missing. The generated `from_json()` function
|
||||
default constructs an object and uses its values as the defaults when calling the `value` function.
|
||||
3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.
|
||||
3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization is required.
|
||||
|
||||
Summary:
|
||||
|
||||
| Need access to private members | Need only de-serialization | Allow missing values when de-serializing | macro |
|
||||
|------------------------------------------------------------------|------------------------------------------------------------------|------------------------------------------------------------------|-------------------------------------------------------|
|
||||
| <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: red;">:octicons-x-circle-fill-24:</div> | **NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE** |
|
||||
| <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: green;">:octicons-check-circle-fill-24:</div> | **NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT** |
|
||||
| <div style="color: red;">:octicons-x-circle-fill-24:</div> | <div style="color: green;">:octicons-check-circle-fill-24:</div> | <div style="color: grey;">:octicons-skip-fill-24:</div> | **NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE** |
|
||||
|
||||
## Parameters
|
||||
|
||||
@@ -25,15 +33,17 @@ parameter is the name of the class/struct, and all remaining parameters name the
|
||||
: name of the type (class, struct) to serialize/deserialize
|
||||
|
||||
`member` (in)
|
||||
: name of the (public) member variable to serialize/deserialize; up to 64 members can be given as comma-separated list
|
||||
: name of the (public) member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list
|
||||
|
||||
## Default definition
|
||||
|
||||
The macros add two functions to the namespace which take care of the serialization and deserialization:
|
||||
|
||||
```cpp
|
||||
void to_json(nlohmann::json&, const type&);
|
||||
void from_json(const nlohmann::json&, type&); // except (3)
|
||||
template<typename BasicJsonType>
|
||||
void to_json(BasicJsonType&, const type&);
|
||||
template<typename BasicJsonType>
|
||||
void from_json(const BasicJsonType&, type&); // except (3)
|
||||
```
|
||||
|
||||
See examples below for the concrete generated code.
|
||||
@@ -53,8 +63,6 @@ See examples below for the concrete generated code.
|
||||
|
||||
- The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types
|
||||
with more than 64 member variables, you need to define the `to_json`/`from_json` functions manually.
|
||||
- The macros only work for the [`nlohmann::json`](../json.md) type; other specializations such as
|
||||
[`nlohmann::ordered_json`](../ordered_json.md) are currently unsupported.
|
||||
|
||||
## Examples
|
||||
|
||||
@@ -82,7 +90,7 @@ See examples below for the concrete generated code.
|
||||
|
||||
The macro is equivalent to:
|
||||
|
||||
```cpp hl_lines="16 17 18 19 20 21 22 23 24 25 26 27 28"
|
||||
```cpp hl_lines="16 17 18 19 20 21 22 23 24 25 26 27 28 29 30"
|
||||
--8<-- "examples/nlohmann_define_type_non_intrusive_explicit.cpp"
|
||||
```
|
||||
|
||||
@@ -90,7 +98,7 @@ See examples below for the concrete generated code.
|
||||
|
||||
Consider the following complete example:
|
||||
|
||||
```cpp hl_lines="22"
|
||||
```cpp hl_lines="21"
|
||||
--8<-- "examples/nlohmann_define_type_non_intrusive_with_default_macro.cpp"
|
||||
```
|
||||
|
||||
@@ -111,7 +119,7 @@ See examples below for the concrete generated code.
|
||||
|
||||
The macro is equivalent to:
|
||||
|
||||
```cpp hl_lines="22 23 24 25 26 27 28 29 30 31 32 33 34 35"
|
||||
```cpp hl_lines="21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36"
|
||||
--8<-- "examples/nlohmann_define_type_non_intrusive_with_default_explicit.cpp"
|
||||
```
|
||||
|
||||
@@ -140,18 +148,24 @@ See examples below for the concrete generated code.
|
||||
|
||||
The macro is equivalent to:
|
||||
|
||||
```cpp hl_lines="16 17 18 19 20 21"
|
||||
```cpp hl_lines="16 17 18 19 20 21 22"
|
||||
--8<-- "examples/nlohmann_define_type_non_intrusive_only_serialize_explicit.cpp"
|
||||
```
|
||||
|
||||
## See also
|
||||
|
||||
- [NLOHMANN_DEFINE_TYPE_INTRUSIVE{_WITH_DEFAULT, _ONLY_SERIALIZE}](nlohmann_define_type_intrusive.md)
|
||||
- [NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT,
|
||||
NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE](nlohmann_define_type_intrusive.md)
|
||||
for a similar macro that can be defined _inside_ the type.
|
||||
- [NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT,
|
||||
NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE,
|
||||
NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT,
|
||||
NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE](nlohmann_define_derived_type.md) for similar macros for
|
||||
derived types
|
||||
- [Arbitrary Type Conversions](../../features/arbitrary_types.md) for an overview.
|
||||
|
||||
## Version history
|
||||
|
||||
1. Added in version 3.9.0.
|
||||
2. Added in version 3.11.0.
|
||||
3. Added in version TODO.
|
||||
3. Added in version 3.11.3.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
```
|
||||
|
||||
By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an
|
||||
enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be
|
||||
enum is modified or re-ordered after data has been serialized to JSON, the later deserialized JSON data may be
|
||||
undefined or a different enum value than was originally intended.
|
||||
|
||||
The `NLOHMANN_JSON_SERIALIZE_ENUM` allows to define a user-defined serialization for every enumerator.
|
||||
@@ -20,7 +20,7 @@ The `NLOHMANN_JSON_SERIALIZE_ENUM` allows to define a user-defined serialization
|
||||
|
||||
## Default definition
|
||||
|
||||
The macros add two friend functions to the class which take care of the serialization and deserialization:
|
||||
The macro adds two functions to the namespace which take care of the serialization and deserialization:
|
||||
|
||||
```cpp
|
||||
template<typename BasicJsonType>
|
||||
|
||||
@@ -21,8 +21,8 @@ the stream `i`
|
||||
## Exceptions
|
||||
|
||||
- Throws [`parse_error.101`](../home/exceptions.md#jsonexceptionparse_error101) in case of an unexpected token.
|
||||
- Throws [`parse_error.102`](../home/exceptions.md#jsonexceptionparse_error102) if to_unicode fails or surrogate error.
|
||||
- Throws [`parse_error.103`](../home/exceptions.md#jsonexceptionparse_error103) if to_unicode fails.
|
||||
- Throws [`parse_error.102`](../home/exceptions.md#jsonexceptionparse_error102) if `to_unicode` fails or surrogate error.
|
||||
- Throws [`parse_error.103`](../home/exceptions.md#jsonexceptionparse_error103) if `to_unicode` fails.
|
||||
|
||||
## Complexity
|
||||
|
||||
|
||||
@@ -84,4 +84,4 @@ Linear.
|
||||
|
||||
1. Added in version 1.0.0. Added support for indentation character and deprecated
|
||||
`#!cpp std::ostream& operator>>(const basic_json& j, std::ostream& o)` in version 3.0.0.
|
||||
3. Added in version 3.11.0.
|
||||
2. Added in version 3.11.0.
|
||||
|
||||
1
external/json/docs/mkdocs/docs/community/code_of_conduct.md
vendored
Normal file
1
external/json/docs/mkdocs/docs/community/code_of_conduct.md
vendored
Normal file
@@ -0,0 +1 @@
|
||||
--8<-- "../../../.github/CODE_OF_CONDUCT.md"
|
||||
1
external/json/docs/mkdocs/docs/community/contribution_guidelines.md
vendored
Normal file
1
external/json/docs/mkdocs/docs/community/contribution_guidelines.md
vendored
Normal file
@@ -0,0 +1 @@
|
||||
--8<-- "../../../.github/CONTRIBUTING.md"
|
||||
122
external/json/docs/mkdocs/docs/community/governance.md
vendored
Normal file
122
external/json/docs/mkdocs/docs/community/governance.md
vendored
Normal file
@@ -0,0 +1,122 @@
|
||||
# Governance
|
||||
|
||||
The governance model for the JSON for Modern C++ project is a **Benevolent Dictator for Life (BDFL)** structure. As the
|
||||
sole maintainer, [Niels Lohmann](https://github.com/nlohmann) is responsible for all key aspects of the project. The
|
||||
project governance may evolve as the project grows, but any changes will be documented here and communicated to
|
||||
contributors.
|
||||
|
||||
## Overview
|
||||
|
||||
This project is led by a benevolent dictator, [Niels Lohmann](https://github.com/nlohmann), and managed by the
|
||||
community. That is, the community actively contributes to the day-to-day maintenance of the project, but the general
|
||||
strategic line is drawn by the benevolent dictator. In case of disagreement, they have the last word. It is the
|
||||
benevolent dictator’s job to resolve disputes within the community and to ensure that the project is able to progress in
|
||||
a coordinated way. In turn, it is the community’s job to guide the decisions of the benevolent dictator through active
|
||||
engagement and contribution.
|
||||
|
||||
## Roles and responsibilities
|
||||
|
||||
### Benevolent dictator (project lead)
|
||||
|
||||
Typically, the benevolent dictator, or project lead, is self-appointed. However, because the community always has the
|
||||
ability to fork, this person is fully answerable to the community. The project lead’s role is a difficult one: they set
|
||||
the strategic objectives of the project and communicate these clearly to the community. They also have to understand the
|
||||
community as a whole and strive to satisfy as many conflicting needs as possible, while ensuring that the project
|
||||
survives in the long term.
|
||||
|
||||
In many ways, the role of the benevolent dictator is less about dictatorship and more about diplomacy. The key is to
|
||||
ensure that, as the project expands, the right people are given influence over it and the community rallies behind the
|
||||
vision of the project lead. The lead’s job is then to ensure that the committers (see below) make the right decisions on
|
||||
behalf of the project. Generally speaking, as long as the committers are aligned with the project’s strategy, the
|
||||
project lead will allow them to proceed as they desire.
|
||||
|
||||
### Committers
|
||||
|
||||
Committers are contributors who have made several valuable contributions to the project and are now relied upon to both
|
||||
write code directly to the repository and screen the contributions of others. In many cases they are programmers but it
|
||||
is also possible that they contribute in a different role. Typically, a committer will focus on a specific aspect of the
|
||||
project, and will bring a level of expertise and understanding that earns them the respect of the community and the
|
||||
project lead. The role of committer is not an official one, it is simply a position that influential members of the
|
||||
community will find themselves in as the project lead looks to them for guidance and support.
|
||||
|
||||
Committers have no authority over the overall direction of the project. However, they do have the ear of the project
|
||||
lead. It is a committer’s job to ensure that the lead is aware of the community’s needs and collective objectives, and
|
||||
to help develop or elicit appropriate contributions to the project. Often, committers are given informal control over
|
||||
their specific areas of responsibility, and are assigned rights to directly modify certain areas of the source code.
|
||||
That is, although committers do not have explicit decision-making authority, they will often find that their actions are
|
||||
synonymous with the decisions made by the lead.
|
||||
|
||||
### Contributors
|
||||
|
||||
Contributors are community members who either have no desire to become committers, or have not yet been given the
|
||||
opportunity by the benevolent dictator. They make valuable contributions, such as those outlined in the list below, but
|
||||
generally do not have the authority to make direct changes to the project code. Contributors engage with the project
|
||||
through communication tools, such as email lists, and via reports and patches attached to issues in the issue tracker,
|
||||
as detailed in our community tools document.
|
||||
|
||||
Anyone can become a contributor. There is no expectation of commitment to the project, no specific skill requirements
|
||||
and no selection process. To become a contributor, a community member simply has to perform one or more actions that are
|
||||
beneficial to the project.
|
||||
|
||||
Some contributors will already be engaging with the project as users, but will also find themselves doing one or more of
|
||||
the following:
|
||||
|
||||
- supporting new users (current users often provide the most effective new user support)
|
||||
- reporting bugs
|
||||
- identifying requirements
|
||||
- supplying graphics and web design
|
||||
- programming
|
||||
- assisting with project infrastructure
|
||||
- writing documentation
|
||||
- fixing bugs
|
||||
- adding features
|
||||
|
||||
As contributors gain experience and familiarity with the project, they may find that the project lead starts relying on
|
||||
them more and more. When this begins to happen, they gradually adopt the role of committer, as described above.
|
||||
|
||||
### Users
|
||||
|
||||
Users are community members who have a need for the project. They are the most important members of the community:
|
||||
without them, the project would have no purpose. Anyone can be a user; there are no specific requirements.
|
||||
|
||||
Users should be encouraged to participate in the life of the project and the community as much as possible. User
|
||||
contributions enable the project team to ensure that they are satisfying the needs of those users. Common user
|
||||
activities include (but are not limited to):
|
||||
|
||||
- evangelising about the project
|
||||
- informing developers of project strengths and weaknesses from a new user’s perspective
|
||||
- providing moral support (a ‘thank you’ goes a long way)
|
||||
- providing financial support
|
||||
|
||||
Users who continue to engage with the project and its community will often find themselves becoming more and more
|
||||
involved. Such users may then go on to become contributors, as described above.
|
||||
|
||||
## Support
|
||||
|
||||
All participants in the community are encouraged to provide support for new users within the project management
|
||||
infrastructure. This support is provided as a way of growing the community. Those seeking support should recognise that
|
||||
all support activity within the project is voluntary and is therefore provided as and when time allows. A user requiring
|
||||
guaranteed response times or results should therefore seek to purchase a support contract from a vendor. (Of course,
|
||||
that vendor should be an active member of the community.) However, for those willing to engage with the project on its
|
||||
own terms, and willing to help support other users, the community support channels are ideal.
|
||||
|
||||
## Contribution Process
|
||||
|
||||
Anyone can contribute to the project, regardless of their skills, as there are many ways to contribute. For instance, a
|
||||
contributor might be active on the project mailing list and issue tracker, or might supply patches. The various ways of
|
||||
contributing are described in more detail in our roles in open source document.
|
||||
|
||||
The developer mailing list is the most appropriate place for a contributor to ask for help when making their first
|
||||
contribution.
|
||||
|
||||
## Decision-Making Process
|
||||
|
||||
The benevolent dictatorship model does not need a formal conflict resolution process, since the project lead’s word is
|
||||
final. If the community chooses to question the wisdom of the actions of a committer, the project lead can review their
|
||||
decisions by checking the email archives, and either uphold or reverse them.
|
||||
|
||||
---
|
||||
|
||||
!!! quote "Source"
|
||||
|
||||
The text was taken from http://oss-watch.ac.uk/resources/benevolentdictatorgovernancemodel.
|
||||
7
external/json/docs/mkdocs/docs/community/index.md
vendored
Normal file
7
external/json/docs/mkdocs/docs/community/index.md
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
# Community
|
||||
|
||||
- [Code of Conduct](code_of_conduct.md) - the rules and norms of this project
|
||||
- [Contribution Guidelines](contribution_guidelines.md) - guidelines how to contribute to this project
|
||||
- [Governance](governance.md) - the governance model of this project
|
||||
- [Quality Assurance](quality_assurance.md) - how the quality of this project is assured
|
||||
- [Security Policy](security_policy.md) - the security policy of the project
|
||||
214
external/json/docs/mkdocs/docs/community/quality_assurance.md
vendored
Normal file
214
external/json/docs/mkdocs/docs/community/quality_assurance.md
vendored
Normal file
@@ -0,0 +1,214 @@
|
||||
# Quality assurance
|
||||
|
||||
Ensuring quality is paramount for this project, particularly because [numerous other projects](../home/customers.md)
|
||||
depend on it. Each commit to the library undergoes rigorous checks against the following requirements, and any
|
||||
violations will result in a failed build.
|
||||
|
||||
## C++ language compliance and compiler compatibility
|
||||
|
||||
!!! success "Requirement: Compiler support"
|
||||
|
||||
Any compiler with complete C++11 support can compile the library without warnings.
|
||||
|
||||
- [x] The library is compiled with 50+ different C++ compilers with different operating systems and platforms,
|
||||
including the oldest versions known to compile the library.
|
||||
|
||||
??? abstract "Compilers used in continuous integration"
|
||||
|
||||
| Compiler | Architecture | Operating System | CI |
|
||||
|----------------------------------------------|--------------|--------------------------|-----------|
|
||||
| AppleClang 14.0.0.14000029; Xcode 14.1 | x86_64 | macOS 13.7.2 (Ventura) | GitHub |
|
||||
| AppleClang 14.0.0.14000029; Xcode 14.2 | x86_64 | macOS 13.7.2 (Ventura) | GitHub |
|
||||
| AppleClang 14.0.3.14030022; Xcode 14.3.1 | x86_64 | macOS 13.7.2 (Ventura) | GitHub |
|
||||
| AppleClang 15.0.0.15000040; Xcode 15.0.1 | x86_64 | macOS 13.7.2 (Ventura) | GitHub |
|
||||
| AppleClang 15.0.0.15000100; Xcode 15.1 | x86_64 | macOS 13.7.2 (Ventura) | GitHub |
|
||||
| AppleClang 15.0.0.15000100; Xcode 15.2 | x86_64 | macOS 13.7.2 (Ventura) | GitHub |
|
||||
| AppleClang 15.0.0.15000309; Xcode 15.3 | arm64 | macOS 14.7.2 (Sonoma) | GitHub |
|
||||
| AppleClang 15.0.0.15000309; Xcode 15.4 | arm64 | macOS 14.7.2 (Sonoma) | GitHub |
|
||||
| AppleClang 16.0.0.16000026; Xcode 16 | arm64 | macOS 15.2 (Sequoia) | GitHub |
|
||||
| AppleClang 16.0.0.16000026; Xcode 16.1 | arm64 | macOS 15.2 (Sequoia) | GitHub |
|
||||
| AppleClang 16.0.0.16000026; Xcode 16.2 | arm64 | macOS 15.2 (Sequoia) | GitHub |
|
||||
| Clang 3.5.2 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 3.6.2 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 3.7.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 3.8.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 3.9.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 4.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 5.0.2 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 6.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 7.1.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 8.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 9.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 10.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 11.0.0 with GNU-like command-line | x86_64 | Windows 10 (Build 17763) | GitHub |
|
||||
| Clang 11.1.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 12.0.0 with GNU-like command-line | x86_64 | Windows 10 (Build 17763) | GitHub |
|
||||
| Clang 12.0.0 with MSVC-like command-line | x86_64 | Windows 10 (Build 17763) | GitHub |
|
||||
| Clang 12.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 13.0.0 with GNU-like command-line | x86_64 | Windows 10 (Build 17763) | GitHub |
|
||||
| Clang 13.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 14.0.0 with GNU-like command-line | x86_64 | Windows 10 (Build 17763) | GitHub |
|
||||
| Clang 14.0.6 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 15.0.0 with GNU-like command-line | x86_64 | Windows 10 (Build 17763) | GitHub |
|
||||
| Clang 15.0.7 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 16.0.6 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 17.0.6 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 18.1.8 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 19.1.7 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 20.1.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| Clang 21.0.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 4.8.5 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 4.9.3 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 5.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 6.4.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 7.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 8.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 9.3.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 9.4.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 9.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 10.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 11.4.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 11.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 12.2.0 (MinGW-W64 i686-ucrt-posix-dwarf) | x86_64 | Windows 10 (Build 17763) | GitHub |
|
||||
| GNU 12.2.0 (MinGW-W64 x86_64-ucrt-posix-seh) | x86_64 | Windows 10 (Build 17763) | GitHub |
|
||||
| GNU 12.4.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 13.3.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 14.2.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub |
|
||||
| GNU 14.2.0 | arm64 | Linux 6.1.100 | Cirrus CI |
|
||||
| MSVC 19.0.24241.7 | x86 | Windows 8.1 | AppVeyor |
|
||||
| MSVC 19.16.27035.0 | x86 | Windows-10 (Build 14393) | AppVeyor |
|
||||
| MSVC 19.29.30157.0 | x86 | Windows 10 (Build 17763) | GitHub |
|
||||
| MSVC 19.29.30157.0 | x86_64 | Windows 10 (Build 17763) | GitHub |
|
||||
| MSVC 19.29.30157.0 | x86 | Windows-10 (Build 17763) | AppVeyor |
|
||||
| MSVC 19.42.34435.0 | x86 | Windows 10 (Build 20348) | GitHub |
|
||||
| MSVC 19.42.34435.0 | x86_64 | Windows 10 (Build 20348) | GitHub |
|
||||
|
||||
- [x] The library is compiled with all C++ language revisions (C++11, C++14, C++17, C++20, C++23, and C++26) to detect
|
||||
and fix language deprecations early.
|
||||
- [x] The library is checked for compiler warnings:
|
||||
- On Clang, `-Weverything` is used with 7 exceptions.
|
||||
|
||||
??? abstract "Clang warnings"
|
||||
|
||||
```cmake
|
||||
--8<-- "../../../cmake/clang_flags.cmake"
|
||||
```
|
||||
|
||||
- On GCC, 300+ warnings are enabled with 8 exceptions.
|
||||
|
||||
??? abstract "GCC warnings"
|
||||
|
||||
```cmake
|
||||
--8<-- "../../../cmake/gcc_flags.cmake"
|
||||
```
|
||||
|
||||
## C++ standard library compliance
|
||||
|
||||
!!! success "Requirement: No prerequisites"
|
||||
|
||||
The library has no prerequisites other than the Standard Template Library (STL).
|
||||
|
||||
- [x] The library is compiled and tested with both [libc++](https://libcxx.llvm.org) and
|
||||
[libstdc++](https://gcc.gnu.org/onlinedocs/libstdc++/) to detect subtle differences or incompatibilities.
|
||||
- [x] The code checked with [Include What You Use (IWYU)](https://include-what-you-use.org) that all required standard
|
||||
headers are included.
|
||||
- [x] On Windows, the library is compiled with `<Windows.h>` being included to detect and avoid common bugs.
|
||||
- [x] The library is compiled with exceptions disabled to support alternative means of error handling.
|
||||
|
||||
## Stable public API
|
||||
|
||||
!!! success "Requirement: Stable public API"
|
||||
|
||||
Any change to the library does not break the public API.
|
||||
|
||||
- [x] All public API functions are tested with a variety of arguments.
|
||||
- [x] The library is compiled and tested with different template arguments for number, string, array, and object types.
|
||||
- [x] Unit tests cover all lines of the code base.
|
||||
- [x] Every exception of the library is thrown in the test suite, and the error messages and exception ids are checked.
|
||||
|
||||
!!! success "Requirement: Complete documentation"
|
||||
|
||||
The public API is extensively documented.
|
||||
|
||||
- [x] Every public API function has a dedicated page in the
|
||||
[API reference documentation](https://json.nlohmann.me/api/basic_json/) with a self-contained code example.
|
||||
- [x] All examples in the documentation are tested, and changes in their output are treated as an error.
|
||||
|
||||
## Robust input processing
|
||||
|
||||
!!! success "Requirement: Standards compliance"
|
||||
|
||||
The library is compliant to JSON as defined in [RFC 8259](https://datatracker.ietf.org/doc/html/rfc8259).
|
||||
|
||||
- [x] The lexer is tested with all valid Unicode code points and all prefixes of all invalid Unicode code points.
|
||||
- [x] The parser is tested against extensive correctness suites for JSON compliance.
|
||||
- [x] In addition, the library is continuously fuzz-tested at [OSS-Fuzz](https://google.github.io/oss-fuzz/) where the
|
||||
library is checked against billions of inputs.
|
||||
|
||||
## Static analysis
|
||||
|
||||
!!! success "Requirement: State-of-the-art code analysis"
|
||||
|
||||
The code is checked with state-of-the-art static code analysis tools.
|
||||
|
||||
- [x] The code is checked with the latest [Clang-Tidy](https://clang.llvm.org/extra/clang-tidy/).
|
||||
|
||||
??? abstract "Clang-Tidy configuration (.clang-tidy)"
|
||||
|
||||
```ini
|
||||
--8<-- "../../../.clang-tidy"
|
||||
```
|
||||
|
||||
- [x] The code is checked with the latest [Cppcheck](https://cppcheck.sourceforge.io) with all warnings enabled.
|
||||
- [x] The code is checked with the latest [Clang Static Analyzer](https://clang-analyzer.llvm.org) with 89 enabled
|
||||
rules.
|
||||
- [x] The code is checked with [Infer](https://fbinfer.com).
|
||||
- [x] The code is checked with [Codacy](https://app.codacy.com/gh/nlohmann/json/dashboard).
|
||||
|
||||
## Dynamic analysis
|
||||
|
||||
!!! success "Requirement: Correctness"
|
||||
|
||||
The library is checked for memory correctness and absence of undefined behavior.
|
||||
|
||||
- [x] The test suite is executed with enabled [runtime assertions](https://json.nlohmann.me/features/assertions/) to
|
||||
check invariants and preconditions of functions to detect undefined behavior.
|
||||
- [x] The test suite is executed with [Valgrind](https://valgrind.org) (Memcheck) to detect memory leaks.
|
||||
- [x] The test suite is executed with [Sanitizers](https://github.com/google/sanitizers) (address sanitizer, undefined
|
||||
behavior sanitizer, integer overflow detection, nullability violations).
|
||||
|
||||
## Style check
|
||||
|
||||
!!! success "Requirement: Common code style"
|
||||
|
||||
A common code style is used throughout all code files of the library.
|
||||
|
||||
- [x] The code is formatted with [Artistic Style](https://astyle.sourceforge.net) (astyle) against a style configuration
|
||||
that is also enforced in the CI.
|
||||
|
||||
??? abstract "Astyle configuration (tools/astyle/.astylerc)"
|
||||
|
||||
```ini
|
||||
--8<-- "../../../tools/astyle/.astylerc"
|
||||
```
|
||||
|
||||
- [x] The code style is checked with [cpplint](https://github.com/cpplint/cpplint) with 61 enabled rules.
|
||||
|
||||
## Simple integration
|
||||
|
||||
!!! success "Requirement: Single header"
|
||||
|
||||
The library can be used by adding a single header to a C++ project.
|
||||
|
||||
- [x] An amalgamation script is used to check if the source code is exposed as a self-contained single-header file.
|
||||
- [x] The test suite is checked against the amalgamated source file as well as the individual source file.
|
||||
|
||||
!!! success "Requirement: CMake as primary development tool"
|
||||
|
||||
All library functions are exposed and usable by CMake.
|
||||
|
||||
- [x] All library options are exposed as [CMake options](https://json.nlohmann.me/integration/cmake/) and tested.
|
||||
- [x] The library is tested against relevant CMake versions:
|
||||
- CMake 3.5 (the earliest supported)
|
||||
- CMake 3.31.6 (the latest 3.x release)
|
||||
- CMake 4.0.0 (a very recent release)
|
||||
1
external/json/docs/mkdocs/docs/community/security_policy.md
vendored
Normal file
1
external/json/docs/mkdocs/docs/community/security_policy.md
vendored
Normal file
@@ -0,0 +1 @@
|
||||
--8<-- "../../../.github/SECURITY.md"
|
||||
@@ -1,4 +1,4 @@
|
||||
/* disable ligatures in code and preformatted blocks */
|
||||
code, pre {
|
||||
font-variant-ligatures: none;
|
||||
/* enable ligatures in code and preformatted blocks */
|
||||
.md-typeset code, .md-typeset pre {
|
||||
font-variant-ligatures: common-ligatures;
|
||||
}
|
||||
|
||||
39
external/json/docs/mkdocs/docs/examples/README.cpp
vendored
Normal file
39
external/json/docs/mkdocs/docs/examples/README.cpp
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create a JSON object
|
||||
json j =
|
||||
{
|
||||
{"pi", 3.141},
|
||||
{"happy", true},
|
||||
{"name", "Niels"},
|
||||
{"nothing", nullptr},
|
||||
{
|
||||
"answer", {
|
||||
{"everything", 42}
|
||||
}
|
||||
},
|
||||
{"list", {1, 0, 2}},
|
||||
{
|
||||
"object", {
|
||||
{"currency", "USD"},
|
||||
{"value", 42.99}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// add new values
|
||||
j["new"]["key"]["value"] = {"another", "list"};
|
||||
|
||||
// count elements
|
||||
auto s = j.size();
|
||||
j["size"] = s;
|
||||
|
||||
// pretty print with indent of 4 spaces
|
||||
std::cout << std::setw(4) << j << '\n';
|
||||
}
|
||||
27
external/json/docs/mkdocs/docs/examples/README.output
vendored
Normal file
27
external/json/docs/mkdocs/docs/examples/README.output
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"answer": {
|
||||
"everything": 42
|
||||
},
|
||||
"happy": true,
|
||||
"list": [
|
||||
1,
|
||||
0,
|
||||
2
|
||||
],
|
||||
"name": "Niels",
|
||||
"new": {
|
||||
"key": {
|
||||
"value": [
|
||||
"another",
|
||||
"list"
|
||||
]
|
||||
}
|
||||
},
|
||||
"nothing": null,
|
||||
"object": {
|
||||
"currency": "USD",
|
||||
"value": 42.99
|
||||
},
|
||||
"pi": 3.141,
|
||||
"size": 8
|
||||
}
|
||||
26
external/json/docs/mkdocs/docs/examples/accept__string.cpp
vendored
Normal file
26
external/json/docs/mkdocs/docs/examples/accept__string.cpp
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// a valid JSON text
|
||||
auto valid_text = R"(
|
||||
{
|
||||
"numbers": [1, 2, 3]
|
||||
}
|
||||
)";
|
||||
|
||||
// an invalid JSON text
|
||||
auto invalid_text = R"(
|
||||
{
|
||||
"strings": ["extra", "comma", ]
|
||||
}
|
||||
)";
|
||||
|
||||
std::cout << std::boolalpha
|
||||
<< json::accept(valid_text) << ' '
|
||||
<< json::accept(invalid_text) << '\n';
|
||||
}
|
||||
1
external/json/docs/mkdocs/docs/examples/accept__string.output
vendored
Normal file
1
external/json/docs/mkdocs/docs/examples/accept__string.output
vendored
Normal file
@@ -0,0 +1 @@
|
||||
true false
|
||||
19
external/json/docs/mkdocs/docs/examples/array.cpp
vendored
Normal file
19
external/json/docs/mkdocs/docs/examples/array.cpp
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
#include <iostream>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create JSON arrays
|
||||
json j_no_init_list = json::array();
|
||||
json j_empty_init_list = json::array({});
|
||||
json j_nonempty_init_list = json::array({1, 2, 3, 4});
|
||||
json j_list_of_pairs = json::array({ {"one", 1}, {"two", 2} });
|
||||
|
||||
// serialize the JSON arrays
|
||||
std::cout << j_no_init_list << '\n';
|
||||
std::cout << j_empty_init_list << '\n';
|
||||
std::cout << j_nonempty_init_list << '\n';
|
||||
std::cout << j_list_of_pairs << '\n';
|
||||
}
|
||||
4
external/json/docs/mkdocs/docs/examples/array.output
vendored
Normal file
4
external/json/docs/mkdocs/docs/examples/array.output
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
[]
|
||||
[]
|
||||
[1,2,3,4]
|
||||
[["one",1],["two",2]]
|
||||
10
external/json/docs/mkdocs/docs/examples/array_t.cpp
vendored
Normal file
10
external/json/docs/mkdocs/docs/examples/array_t.cpp
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
std::cout << std::boolalpha << std::is_same<std::vector<json>, json::array_t>::value << std::endl;
|
||||
}
|
||||
1
external/json/docs/mkdocs/docs/examples/array_t.output
vendored
Normal file
1
external/json/docs/mkdocs/docs/examples/array_t.output
vendored
Normal file
@@ -0,0 +1 @@
|
||||
true
|
||||
103
external/json/docs/mkdocs/docs/examples/at__json_pointer.cpp
vendored
Normal file
103
external/json/docs/mkdocs/docs/examples/at__json_pointer.cpp
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
#include <iostream>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
using namespace nlohmann::literals;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create a JSON value
|
||||
json j =
|
||||
{
|
||||
{"number", 1}, {"string", "foo"}, {"array", {1, 2}}
|
||||
};
|
||||
|
||||
// read-only access
|
||||
|
||||
// output element with JSON pointer "/number"
|
||||
std::cout << j.at("/number"_json_pointer) << '\n';
|
||||
// output element with JSON pointer "/string"
|
||||
std::cout << j.at("/string"_json_pointer) << '\n';
|
||||
// output element with JSON pointer "/array"
|
||||
std::cout << j.at("/array"_json_pointer) << '\n';
|
||||
// output element with JSON pointer "/array/1"
|
||||
std::cout << j.at("/array/1"_json_pointer) << '\n';
|
||||
|
||||
// writing access
|
||||
|
||||
// change the string
|
||||
j.at("/string"_json_pointer) = "bar";
|
||||
// output the changed string
|
||||
std::cout << j["string"] << '\n';
|
||||
|
||||
// change an array element
|
||||
j.at("/array/1"_json_pointer) = 21;
|
||||
// output the changed array
|
||||
std::cout << j["array"] << '\n';
|
||||
|
||||
// out_of_range.106
|
||||
try
|
||||
{
|
||||
// try to use an array index with leading '0'
|
||||
json::reference ref = j.at("/array/01"_json_pointer);
|
||||
}
|
||||
catch (const json::parse_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.109
|
||||
try
|
||||
{
|
||||
// try to use an array index that is not a number
|
||||
json::reference ref = j.at("/array/one"_json_pointer);
|
||||
}
|
||||
catch (const json::parse_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to use an invalid array index
|
||||
json::reference ref = j.at("/array/4"_json_pointer);
|
||||
}
|
||||
catch (const json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.402
|
||||
try
|
||||
{
|
||||
// try to use the array index '-'
|
||||
json::reference ref = j.at("/array/-"_json_pointer);
|
||||
}
|
||||
catch (const json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.403
|
||||
try
|
||||
{
|
||||
// try to use a JSON pointer to a nonexistent object key
|
||||
json::const_reference ref = j.at("/foo"_json_pointer);
|
||||
}
|
||||
catch (const json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.404
|
||||
try
|
||||
{
|
||||
// try to use a JSON pointer that cannot be resolved
|
||||
json::reference ref = j.at("/number/foo"_json_pointer);
|
||||
}
|
||||
catch (const json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
}
|
||||
12
external/json/docs/mkdocs/docs/examples/at__json_pointer.output
vendored
Normal file
12
external/json/docs/mkdocs/docs/examples/at__json_pointer.output
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
1
|
||||
"foo"
|
||||
[1,2]
|
||||
2
|
||||
"bar"
|
||||
[1,21]
|
||||
[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'
|
||||
[json.exception.parse_error.109] parse error: array index 'one' is not a number
|
||||
[json.exception.out_of_range.401] array index 4 is out of range
|
||||
[json.exception.out_of_range.402] array index '-' (2) is out of range
|
||||
[json.exception.out_of_range.403] key 'foo' not found
|
||||
[json.exception.out_of_range.404] unresolved reference token 'foo'
|
||||
80
external/json/docs/mkdocs/docs/examples/at__json_pointer_const.cpp
vendored
Normal file
80
external/json/docs/mkdocs/docs/examples/at__json_pointer_const.cpp
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
#include <iostream>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
using namespace nlohmann::literals;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create a JSON value
|
||||
const json j =
|
||||
{
|
||||
{"number", 1}, {"string", "foo"}, {"array", {1, 2}}
|
||||
};
|
||||
|
||||
// read-only access
|
||||
|
||||
// output element with JSON pointer "/number"
|
||||
std::cout << j.at("/number"_json_pointer) << '\n';
|
||||
// output element with JSON pointer "/string"
|
||||
std::cout << j.at("/string"_json_pointer) << '\n';
|
||||
// output element with JSON pointer "/array"
|
||||
std::cout << j.at("/array"_json_pointer) << '\n';
|
||||
// output element with JSON pointer "/array/1"
|
||||
std::cout << j.at("/array/1"_json_pointer) << '\n';
|
||||
|
||||
// out_of_range.109
|
||||
try
|
||||
{
|
||||
// try to use an array index that is not a number
|
||||
json::const_reference ref = j.at("/array/one"_json_pointer);
|
||||
}
|
||||
catch (const json::parse_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to use an invalid array index
|
||||
json::const_reference ref = j.at("/array/4"_json_pointer);
|
||||
}
|
||||
catch (const json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.402
|
||||
try
|
||||
{
|
||||
// try to use the array index '-'
|
||||
json::const_reference ref = j.at("/array/-"_json_pointer);
|
||||
}
|
||||
catch (const json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.403
|
||||
try
|
||||
{
|
||||
// try to use a JSON pointer to a nonexistent object key
|
||||
json::const_reference ref = j.at("/foo"_json_pointer);
|
||||
}
|
||||
catch (const json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.404
|
||||
try
|
||||
{
|
||||
// try to use a JSON pointer that cannot be resolved
|
||||
json::const_reference ref = j.at("/number/foo"_json_pointer);
|
||||
}
|
||||
catch (const json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
}
|
||||
9
external/json/docs/mkdocs/docs/examples/at__json_pointer_const.output
vendored
Normal file
9
external/json/docs/mkdocs/docs/examples/at__json_pointer_const.output
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
1
|
||||
"foo"
|
||||
[1,2]
|
||||
2
|
||||
[json.exception.parse_error.109] parse error: array index 'one' is not a number
|
||||
[json.exception.out_of_range.401] array index 4 is out of range
|
||||
[json.exception.out_of_range.402] array index '-' (2) is out of range
|
||||
[json.exception.out_of_range.403] key 'foo' not found
|
||||
[json.exception.out_of_range.404] unresolved reference token 'foo'
|
||||
49
external/json/docs/mkdocs/docs/examples/at__keytype.c++17.cpp
vendored
Normal file
49
external/json/docs/mkdocs/docs/examples/at__keytype.c++17.cpp
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
#include <iostream>
|
||||
#include <string_view>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using namespace std::string_view_literals;
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create JSON object
|
||||
json object =
|
||||
{
|
||||
{"the good", "il buono"},
|
||||
{"the bad", "il cattivo"},
|
||||
{"the ugly", "il brutto"}
|
||||
};
|
||||
|
||||
// output element with key "the ugly" using string_view
|
||||
std::cout << object.at("the ugly"sv) << '\n';
|
||||
|
||||
// change element with key "the bad" using string_view
|
||||
object.at("the bad"sv) = "il cattivo";
|
||||
|
||||
// output changed array
|
||||
std::cout << object << '\n';
|
||||
|
||||
// exception type_error.304
|
||||
try
|
||||
{
|
||||
// use at() with string_view on a non-object type
|
||||
json str = "I am a string";
|
||||
str.at("the good"sv) = "Another string";
|
||||
}
|
||||
catch (const json::type_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// exception out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to write at a nonexisting key using string_view
|
||||
object.at("the fast"sv) = "il rapido";
|
||||
}
|
||||
catch (const json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
}
|
||||
4
external/json/docs/mkdocs/docs/examples/at__keytype.c++17.output
vendored
Normal file
4
external/json/docs/mkdocs/docs/examples/at__keytype.c++17.output
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
"il brutto"
|
||||
{"the bad":"il cattivo","the good":"il buono","the ugly":"il brutto"}
|
||||
[json.exception.type_error.304] cannot use at() with string
|
||||
[json.exception.out_of_range.403] key 'the fast' not found
|
||||
43
external/json/docs/mkdocs/docs/examples/at__keytype_const.c++17.cpp
vendored
Normal file
43
external/json/docs/mkdocs/docs/examples/at__keytype_const.c++17.cpp
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
#include <iostream>
|
||||
#include <string_view>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using namespace std::string_view_literals;
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create JSON object
|
||||
const json object =
|
||||
{
|
||||
{"the good", "il buono"},
|
||||
{"the bad", "il cattivo"},
|
||||
{"the ugly", "il brutto"}
|
||||
};
|
||||
|
||||
// output element with key "the ugly" using string_view
|
||||
std::cout << object.at("the ugly"sv) << '\n';
|
||||
|
||||
// exception type_error.304
|
||||
try
|
||||
{
|
||||
// use at() with string_view on a non-object type
|
||||
const json str = "I am a string";
|
||||
std::cout << str.at("the good"sv) << '\n';
|
||||
}
|
||||
catch (const json::type_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// exception out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to read from a nonexisting key using string_view
|
||||
std::cout << object.at("the fast"sv) << '\n';
|
||||
}
|
||||
catch (const json::out_of_range& e)
|
||||
{
|
||||
std::cout << "out of range" << '\n';
|
||||
}
|
||||
}
|
||||
3
external/json/docs/mkdocs/docs/examples/at__keytype_const.c++17.output
vendored
Normal file
3
external/json/docs/mkdocs/docs/examples/at__keytype_const.c++17.output
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
"il brutto"
|
||||
[json.exception.type_error.304] cannot use at() with string
|
||||
out of range
|
||||
47
external/json/docs/mkdocs/docs/examples/at__object_t_key_type.cpp
vendored
Normal file
47
external/json/docs/mkdocs/docs/examples/at__object_t_key_type.cpp
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
#include <iostream>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create JSON object
|
||||
json object =
|
||||
{
|
||||
{"the good", "il buono"},
|
||||
{"the bad", "il cattivo"},
|
||||
{"the ugly", "il brutto"}
|
||||
};
|
||||
|
||||
// output element with key "the ugly"
|
||||
std::cout << object.at("the ugly") << '\n';
|
||||
|
||||
// change element with key "the bad"
|
||||
object.at("the bad") = "il cattivo";
|
||||
|
||||
// output changed array
|
||||
std::cout << object << '\n';
|
||||
|
||||
// exception type_error.304
|
||||
try
|
||||
{
|
||||
// use at() on a non-object type
|
||||
json str = "I am a string";
|
||||
str.at("the good") = "Another string";
|
||||
}
|
||||
catch (const json::type_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// exception out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to write at a nonexisting key
|
||||
object.at("the fast") = "il rapido";
|
||||
}
|
||||
catch (const json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
}
|
||||
4
external/json/docs/mkdocs/docs/examples/at__object_t_key_type.output
vendored
Normal file
4
external/json/docs/mkdocs/docs/examples/at__object_t_key_type.output
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
"il brutto"
|
||||
{"the bad":"il cattivo","the good":"il buono","the ugly":"il brutto"}
|
||||
[json.exception.type_error.304] cannot use at() with string
|
||||
[json.exception.out_of_range.403] key 'the fast' not found
|
||||
41
external/json/docs/mkdocs/docs/examples/at__object_t_key_type_const.cpp
vendored
Normal file
41
external/json/docs/mkdocs/docs/examples/at__object_t_key_type_const.cpp
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
#include <iostream>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create JSON object
|
||||
const json object =
|
||||
{
|
||||
{"the good", "il buono"},
|
||||
{"the bad", "il cattivo"},
|
||||
{"the ugly", "il brutto"}
|
||||
};
|
||||
|
||||
// output element with key "the ugly"
|
||||
std::cout << object.at("the ugly") << '\n';
|
||||
|
||||
// exception type_error.304
|
||||
try
|
||||
{
|
||||
// use at() on a non-object type
|
||||
const json str = "I am a string";
|
||||
std::cout << str.at("the good") << '\n';
|
||||
}
|
||||
catch (const json::type_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// exception out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to read from a nonexisting key
|
||||
std::cout << object.at("the fast") << '\n';
|
||||
}
|
||||
catch (const json::out_of_range)
|
||||
{
|
||||
std::cout << "out of range" << '\n';
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user