Unverified Commit 07344fdd authored by Niels Lohmann's avatar Niels Lohmann Committed by GitHub

Merge pull request #2747 from nlohmann/docs

Add documentation for numbers
parents a34e011e cdfe8654
...@@ -58,7 +58,7 @@ To make changes, you need to edit the following files: ...@@ -58,7 +58,7 @@ To make changes, you need to edit the following files:
- Specifically, I am aware of compilation problems with **Microsoft Visual Studio** (there even is an [issue label](https://github.com/nlohmann/json/issues?utf8=✓&q=label%3A%22visual+studio%22+) for these kind of bugs). I understand that even in 2016, complete C++11 support isn't there yet. But please also understand that I do not want to drop features or uglify the code just to make Microsoft's sub-standard compiler happy. The past has shown that there are ways to express the functionality such that the code compiles with the most recent MSVC - unfortunately, this is not the main objective of the project. - Specifically, I am aware of compilation problems with **Microsoft Visual Studio** (there even is an [issue label](https://github.com/nlohmann/json/issues?utf8=✓&q=label%3A%22visual+studio%22+) for these kind of bugs). I understand that even in 2016, complete C++11 support isn't there yet. But please also understand that I do not want to drop features or uglify the code just to make Microsoft's sub-standard compiler happy. The past has shown that there are ways to express the functionality such that the code compiles with the most recent MSVC - unfortunately, this is not the main objective of the project.
- Please refrain from proposing changes that would **break [JSON](https://json.org) conformance**. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension. - Please refrain from proposing changes that would **break [JSON](https://json.org) conformance**. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.
- We shall not extend the library to **support comments**. There is quite some [controversy](https://www.reddit.com/r/programming/comments/4v6chu/why_json_doesnt_support_comments_douglas_crockford/) around this topic, and there were quite some [issues](https://github.com/nlohmann/json/issues/376) on this. We believe that JSON is fine without comments. - We shall not extend the library to **support comments**. There is quite some [controversy](https://www.reddit.com/r/programming/comments/4v6chu/why_json_doesnt_support_comments_douglas_crockford/) around this topic, and there were quite some [issues](https://github.com/nlohmann/json/issues/376) on this. We believe that JSON is fine without comments.
- We do not preserve the **insertion order of object elements**. The [JSON standard](https://tools.ietf.org/html/rfc7159.html) defines objects as "an unordered collection of zero or more name/value pairs". To this end, this library does not preserve insertion order of name/value pairs. (In fact, keys will be traversed in alphabetical order as `std::map` with `std::less` is used by default.) Note this behavior conforms to the standard, and we shall not change it to any other order. If you do want to preserve the insertion order, you can specialize the object type with containers like [`tsl::ordered_map`](https://github.com/Tessil/ordered-map) or [`nlohmann::fifo_map`](https://github.com/nlohmann/fifo_map). - We do not preserve the **insertion order of object elements**. The [JSON standard](https://tools.ietf.org/html/rfc8259.html) defines objects as "an unordered collection of zero or more name/value pairs". To this end, this library does not preserve insertion order of name/value pairs. (In fact, keys will be traversed in alphabetical order as `std::map` with `std::less` is used by default.) Note this behavior conforms to the standard, and we shall not change it to any other order. If you do want to preserve the insertion order, you can specialize the object type with containers like [`tsl::ordered_map`](https://github.com/Tessil/ordered-map) or [`nlohmann::fifo_map`](https://github.com/nlohmann/fifo_map).
- Please do not open pull requests that address **multiple issues**. - Please do not open pull requests that address **multiple issues**.
......
...@@ -12,7 +12,7 @@ prepare_files: clean ...@@ -12,7 +12,7 @@ prepare_files: clean
# create subfolders # create subfolders
mkdir docs/images docs/examples mkdir docs/images docs/examples
# copy images # copy images
cp -vr ../json.gif ../images/range-begin-end.svg ../images/range-rbegin-rend.svg ../images/callback_events.png docs/images cp -vr ../json.gif ../images/range-begin-end.svg ../images/range-rbegin-rend.svg ../images/callback_events.png ../images/json_syntax_number.png docs/images
# copy examples # copy examples
cp -vr ../examples/*.cpp ../examples/*.output docs/examples cp -vr ../examples/*.cpp ../examples/*.output docs/examples
......
...@@ -6,7 +6,7 @@ using array_t = ArrayType<basic_json, AllocatorType<basic_json>>; ...@@ -6,7 +6,7 @@ using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;
The type used to store JSON arrays. The type used to store JSON arrays.
[RFC 7159](http://rfc7159.net/rfc7159) describes JSON arrays as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON arrays as follows:
> An array is an ordered sequence of zero or more values. > An array is an ordered sequence of zero or more values.
To store objects in C++, a type is defined by the template parameters explained below. To store objects in C++, a type is defined by the template parameters explained below.
...@@ -35,7 +35,7 @@ std::vector< ...@@ -35,7 +35,7 @@ std::vector<
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the maximum depth of nesting. > An implementation may set limits on the maximum depth of nesting.
In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be
......
...@@ -6,7 +6,7 @@ using boolean_t = BooleanType; ...@@ -6,7 +6,7 @@ using boolean_t = BooleanType;
The type used to store JSON booleans. The type used to store JSON booleans.
[RFC 7159](http://rfc7159.net/rfc7159) implicitly describes a boolean as a type which differentiates the two literals [RFC 8259](https://tools.ietf.org/html/rfc8259) implicitly describes a boolean as a type which differentiates the two literals
`#!json true` and `#!json false`. `#!json true` and `#!json false`.
To store objects in C++, a type is defined by the template parameter `BooleanType` which chooses the type to use. To store objects in C++, a type is defined by the template parameter `BooleanType` which chooses the type to use.
......
...@@ -6,7 +6,7 @@ using number_float_t = NumberFloatType; ...@@ -6,7 +6,7 @@ using number_float_t = NumberFloatType;
The type used to store JSON numbers (floating-point). The type used to store JSON numbers (floating-point).
[RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows:
> The representation of numbers is similar to that used in most programming languages. A number is represented in base > The representation of numbers is similar to that used in most programming languages. A number is represented in base
> 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may > 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may
> be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that > be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that
...@@ -35,7 +35,7 @@ With the default values for `NumberFloatType` (`double`), the default value for ...@@ -35,7 +35,7 @@ With the default values for `NumberFloatType` (`double`), the default value for
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) states: [RFC 8259](https://tools.ietf.org/html/rfc8259) states:
> This specification allows implementations to set limits on the range and precision of numbers accepted. Since software > This specification allows implementations to set limits on the range and precision of numbers accepted. Since software
> that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good > that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good
> interoperability can be achieved by implementations that expect no more precision or range than these provide, in the > interoperability can be achieved by implementations that expect no more precision or range than these provide, in the
......
...@@ -6,7 +6,7 @@ using number_integer_t = NumberIntegerType; ...@@ -6,7 +6,7 @@ using number_integer_t = NumberIntegerType;
The type used to store JSON numbers (integers). The type used to store JSON numbers (integers).
[RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows:
> The representation of numbers is similar to that used in most programming languages. A number is represented in base > The representation of numbers is similar to that used in most programming languages. A number is represented in base
> 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may > 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may
> be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that > be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that
...@@ -36,7 +36,7 @@ With the default values for `NumberIntegerType` (`std::int64_t`), the default va ...@@ -36,7 +36,7 @@ With the default values for `NumberIntegerType` (`std::int64_t`), the default va
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the range and precision of numbers. > An implementation may set limits on the range and precision of numbers.
When the default type is used, the maximal integer number that can be stored is `9223372036854775807` (INT64_MAX) and When the default type is used, the maximal integer number that can be stored is `9223372036854775807` (INT64_MAX) and
...@@ -44,7 +44,7 @@ the minimal integer number that can be stored is `-9223372036854775808` (INT64_M ...@@ -44,7 +44,7 @@ the minimal integer number that can be stored is `-9223372036854775808` (INT64_M
range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers 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 be automatically be stored as [`number_unsigned_t`](number_unsigned_t.md) or [`number_float_t`](number_float_t.md).
[RFC 7159](http://rfc7159.net/rfc7159) further states: [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 \f$[-2^{53}+1, 2^{53}-1]\f$ are > Note that when such software is used, numbers that are integers and are in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are
> interoperable in the sense that implementations will agree exactly on their numeric values. > interoperable in the sense that implementations will agree exactly on their numeric values.
......
...@@ -6,7 +6,7 @@ using number_unsigned_t = NumberUnsignedType; ...@@ -6,7 +6,7 @@ using number_unsigned_t = NumberUnsignedType;
The type used to store JSON numbers (unsigned). The type used to store JSON numbers (unsigned).
[RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows:
> The representation of numbers is similar to that used in most programming languages. A number is represented in base > The representation of numbers is similar to that used in most programming languages. A number is represented in base
> 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may > 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may
> be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that > be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that
...@@ -36,7 +36,7 @@ With the default values for `NumberUnsignedType` (`std::uint64_t`), the default ...@@ -36,7 +36,7 @@ With the default values for `NumberUnsignedType` (`std::uint64_t`), the default
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the range and precision of numbers. > An implementation may set limits on the range and precision of numbers.
When the default type is used, the maximal integer number that can be stored is `18446744073709551615` (UINT64_MAX) and When the default type is used, the maximal integer number that can be stored is `18446744073709551615` (UINT64_MAX) and
...@@ -44,7 +44,7 @@ the minimal integer number that can be stored is `0`. Integer numbers that are o ...@@ -44,7 +44,7 @@ the minimal integer number that can be stored is `0`. Integer numbers that are o
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 be automatically be stored
as [`number_integer_t`](number_integer_t.md) or [`number_float_t`](number_float_t.md). as [`number_integer_t`](number_integer_t.md) or [`number_float_t`](number_float_t.md).
[RFC 7159](http://rfc7159.net/rfc7159) further states: [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 \f$[-2^{53}+1, 2^{53}-1]\f$ are > Note that when such software is used, numbers that are integers and are in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are
> interoperable in the sense that implementations will agree exactly on their numeric values. > interoperable in the sense that implementations will agree exactly on their numeric values.
......
...@@ -9,7 +9,7 @@ using object_t = ObjectType<StringType, ...@@ -9,7 +9,7 @@ using object_t = ObjectType<StringType,
The type used to store JSON objects. The type used to store JSON objects.
[RFC 7159](http://rfc7159.net/rfc7159) describes JSON objects as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON objects as follows:
> An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a > An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a
> string, number, boolean, null, object, or array. > string, number, boolean, null, object, or array.
...@@ -73,7 +73,7 @@ behavior: ...@@ -73,7 +73,7 @@ behavior:
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the maximum depth of nesting. > An implementation may set limits on the maximum depth of nesting.
In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be
...@@ -90,7 +90,7 @@ Objects are stored as pointers in a `basic_json` type. That is, for any access t ...@@ -90,7 +90,7 @@ Objects are stored as pointers in a `basic_json` type. That is, for any access t
The order name/value pairs are added to the object is *not* preserved by the library. Therefore, iterating an object may 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 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 alphabetical order as `std::map` with `std::less` is used by default. Please note this behavior conforms to
[RFC 7159](http://rfc7159.net/rfc7159), because any order implements the specified "unordered" nature of JSON objects. [RFC 8259](https://tools.ietf.org/html/rfc8259), because any order implements the specified "unordered" nature of JSON objects.
## Version history ## Version history
......
...@@ -6,7 +6,7 @@ using string_t = StringType; ...@@ -6,7 +6,7 @@ using string_t = StringType;
The type used to store JSON strings. The type used to store JSON strings.
[RFC 7159](http://rfc7159.net/rfc7159) describes JSON strings as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON strings as follows:
> A string is a sequence of zero or more Unicode characters. > A string is a sequence of zero or more Unicode characters.
To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the
...@@ -31,7 +31,7 @@ the number of bytes in the string rather than the number of characters or glyphs ...@@ -31,7 +31,7 @@ the number of bytes in the string rather than the number of characters or glyphs
#### String comparison #### String comparison
[RFC 7159](http://rfc7159.net/rfc7159) states: [RFC 8259](https://tools.ietf.org/html/rfc8259) states:
> Software implementations are typically required to test names of object members for equality. Implementations that > Software implementations are typically required to test names of object members for equality. Implementations that
> transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, > transform the textual representation into sequences of Unicode code units and then perform the comparison numerically,
> code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or > code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or
......
...@@ -10,7 +10,7 @@ As for other containers, `begin()` returns an iterator to the first value and `e ...@@ -10,7 +10,7 @@ As for other containers, `begin()` returns an iterator to the first value and `e
### Iteration order for objects ### Iteration order for objects
When iterating over objects, values are ordered with respect to the `object_comparator_t` type which defaults to `std::less`. See the [types documentation](types.md#key-order) for more information. When iterating over objects, values are ordered with respect to the `object_comparator_t` type which defaults to `std::less`. See the [types documentation](types/index.md#key-order) for more information.
??? example ??? example
......
# Types # Overview
This page gives an overview how JSON values are stored and how this can be configured. This page gives an overview how JSON values are stored and how this can be configured.
...@@ -107,7 +107,7 @@ using binary_t = nlohmann::byte_container_with_subtype<BinaryType>; ...@@ -107,7 +107,7 @@ using binary_t = nlohmann::byte_container_with_subtype<BinaryType>;
## Objects ## Objects
[RFC 7159](http://rfc7159.net/rfc7159) describes JSON objects as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON objects as follows:
> An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array. > An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.
...@@ -135,11 +135,11 @@ The choice of `object_t` influences the behavior of the JSON class. With the def ...@@ -135,11 +135,11 @@ The choice of `object_t` influences the behavior of the JSON class. With the def
### Key order ### 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 alphabetical order as `std::map` with `std::less` is used by default. Please note this behavior conforms to [RFC 7159](http://rfc7159.net/rfc7159), because any order implements the specified "unordered" nature of JSON objects. 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 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.
### Limits ### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the maximum depth of nesting. > An implementation may set limits on the maximum depth of nesting.
...@@ -152,7 +152,7 @@ Objects are stored as pointers in a `basic_json` type. That is, for any access t ...@@ -152,7 +152,7 @@ Objects are stored as pointers in a `basic_json` type. That is, for any access t
## Arrays ## Arrays
[RFC 7159](http://rfc7159.net/rfc7159) describes JSON arrays as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON arrays as follows:
> An array is an ordered sequence of zero or more values. > An array is an ordered sequence of zero or more values.
...@@ -169,7 +169,7 @@ std::vector< ...@@ -169,7 +169,7 @@ std::vector<
### Limits ### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the maximum depth of nesting. > An implementation may set limits on the maximum depth of nesting.
...@@ -182,7 +182,7 @@ Arrays are stored as pointers in a `basic_json` type. That is, for any access to ...@@ -182,7 +182,7 @@ Arrays are stored as pointers in a `basic_json` type. That is, for any access to
## Strings ## Strings
[RFC 7159](http://rfc7159.net/rfc7159) describes JSON strings as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON strings as follows:
> A string is a sequence of zero or more Unicode characters. > A string is a sequence of zero or more Unicode characters.
...@@ -198,7 +198,7 @@ Strings are stored in UTF-8 encoding. Therefore, functions like `std::string::si ...@@ -198,7 +198,7 @@ Strings are stored in UTF-8 encoding. Therefore, functions like `std::string::si
### String comparison ### String comparison
[RFC 7159](http://rfc7159.net/rfc7159) states: [RFC 8259](https://tools.ietf.org/html/rfc8259) states:
> Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that `"a\\b"` and `"a\u005Cb"` are not equal. > Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that `"a\\b"` and `"a\u005Cb"` are not equal.
...@@ -211,7 +211,7 @@ String values are stored as pointers in a `basic_json` type. That is, for any ac ...@@ -211,7 +211,7 @@ String values are stored as pointers in a `basic_json` type. That is, for any ac
## Booleans ## Booleans
[RFC 7159](http://rfc7159.net/rfc7159) implicitly describes a boolean as a type which differentiates the two literals `true` and `false`. [RFC 8259](https://tools.ietf.org/html/rfc8259) implicitly describes a boolean as a type which differentiates the two literals `true` and `false`.
### Default type ### Default type
...@@ -223,7 +223,9 @@ Boolean values are stored directly inside a `basic_json` type. ...@@ -223,7 +223,9 @@ Boolean values are stored directly inside a `basic_json` type.
## Numbers ## Numbers
[RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: See the [number handling](number_handling.md) article for a detailed discussion on how numbers are handled by this library.
[RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows:
> The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted. > The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.
...@@ -242,7 +244,7 @@ With the default values for *NumberFloatType* (`#!cpp double`), the default valu ...@@ -242,7 +244,7 @@ With the default values for *NumberFloatType* (`#!cpp double`), the default valu
### Limits ### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the range and precision of numbers. > An implementation may set limits on the range and precision of numbers.
...@@ -250,13 +252,13 @@ When the default type is used, the maximal integer number that can be stored is ...@@ -250,13 +252,13 @@ When the default type is used, the maximal integer number that can be stored is
When the default type is used, the maximal unsigned integer number that can be stored is `#!c 18446744073709551615` (`UINT64_MAX`) and the minimal integer number that can be stored is `#!c 0`. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as `number_integer_t` or `number_float_t`. When the default type is used, the maximal unsigned integer number that can be stored is `#!c 18446744073709551615` (`UINT64_MAX`) and the minimal integer number that can be stored is `#!c 0`. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as `number_integer_t` or `number_float_t`.
[RFC 7159](http://rfc7159.net/rfc7159) further states: [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 interoperable in the sense that implementations will agree exactly on their numeric values. > Note that when such software is used, numbers that are integers and are in the range $[-2^{53}+1, 2^{53}-1]$ are interoperable in the sense that implementations will agree exactly on their numeric values.
As this range is a subrange of the exactly supported range [`INT64_MIN`, `INT64_MAX`], this class's integer type is interoperable. As this range is a subrange of the exactly supported range [`INT64_MIN`, `INT64_MAX`], this class's integer type is interoperable.
[RFC 7159](http://rfc7159.net/rfc7159) states: [RFC 8259](https://tools.ietf.org/html/rfc8259) states:
> This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision. > This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.
......
This diff is collapsed.
...@@ -1167,7 +1167,7 @@ As `noexcept` and `constexpr` specifier have been added to several functions, th ...@@ -1167,7 +1167,7 @@ As `noexcept` and `constexpr` specifier have been added to several functions, th
- Parser error messages are still very vague and contain no information on the error location. - Parser error messages are still very vague and contain no information on the error location.
- The implemented `diff` function is rather primitive and does not create minimal diffs. - The implemented `diff` function is rather primitive and does not create minimal diffs.
- The name of function `iteration_wrapper` may change in the future and the function will be deprecated in the next release. - The name of function `iteration_wrapper` may change in the future and the function will be deprecated in the next release.
- Roundtripping (i.e., parsing a JSON value from a string, serializing it, and comparing the strings) of floating-point numbers is not 100% accurate. Note that [RFC 7159](https://tools.ietf.org/html/rfc7159) defines no format to internally represent numbers and states not requirement for roundtripping. Nevertheless, benchmarks like [Native JSON Benchmark](https://github.com/miloyip/nativejson-benchmark) treat roundtripping deviations as conformance errors. - Roundtripping (i.e., parsing a JSON value from a string, serializing it, and comparing the strings) of floating-point numbers is not 100% accurate. Note that [RFC 8259](https://tools.ietf.org/html/rfc8259) defines no format to internally represent numbers and states not requirement for roundtripping. Nevertheless, benchmarks like [Native JSON Benchmark](https://github.com/miloyip/nativejson-benchmark) treat roundtripping deviations as conformance errors.
## v1.1.0 ## v1.1.0
......
...@@ -9,7 +9,7 @@ repo_url: https://github.com/nlohmann/json ...@@ -9,7 +9,7 @@ repo_url: https://github.com/nlohmann/json
edit_uri: edit/develop/doc/mkdocs/docs edit_uri: edit/develop/doc/mkdocs/docs
# Copyright # Copyright
copyright: Copyright &copy; 2013 - 2020 Niels Lohmann copyright: Copyright &copy; 2013 - 2021 Niels Lohmann
# Configuration # Configuration
theme: theme:
...@@ -62,7 +62,9 @@ nav: ...@@ -62,7 +62,9 @@ nav:
- features/parsing/sax_interface.md - features/parsing/sax_interface.md
- features/enum_conversion.md - features/enum_conversion.md
- features/macros.md - features/macros.md
- features/types.md - Types:
- features/types/index.md
- features/types/number_handling.md
- Integration: - Integration:
- integration/index.md - integration/index.md
- integration/cmake.md - integration/cmake.md
......
...@@ -231,7 +231,7 @@ class lexer : public lexer_base<BasicJsonType> ...@@ -231,7 +231,7 @@ class lexer : public lexer_base<BasicJsonType>
/*! /*!
@brief scan a string literal @brief scan a string literal
This function scans a string according to Sect. 7 of RFC 7159. While This function scans a string according to Sect. 7 of RFC 8259. While
scanning, bytes are escaped and copied into buffer token_buffer. Then the scanning, bytes are escaped and copied into buffer token_buffer. Then the
function returns successfully, token_buffer is *not* null-terminated (as it function returns successfully, token_buffer is *not* null-terminated (as it
may contain \0 bytes), and token_buffer.size() is the number of bytes in the may contain \0 bytes), and token_buffer.size() is the number of bytes in the
...@@ -921,10 +921,10 @@ class lexer : public lexer_base<BasicJsonType> ...@@ -921,10 +921,10 @@ class lexer : public lexer_base<BasicJsonType>
/*! /*!
@brief scan a number literal @brief scan a number literal
This function scans a string according to Sect. 6 of RFC 7159. This function scans a string according to Sect. 6 of RFC 8259.
The function is realized with a deterministic finite state machine derived The function is realized with a deterministic finite state machine derived
from the grammar described in RFC 7159. Starting in state "init", the from the grammar described in RFC 8259. Starting in state "init", the
input is read and used to determined the next state. Only state "done" input is read and used to determined the next state. Only state "done"
accepts the number. State "error" is a trap state to model errors. In the accepts the number. State "error" is a trap state to model errors. In the
table below, "anything" means any character but the ones listed before. table below, "anything" means any character but the ones listed before.
......
...@@ -163,8 +163,8 @@ The invariants are checked by member function assert_invariant(). ...@@ -163,8 +163,8 @@ The invariants are checked by member function assert_invariant().
@note ObjectType trick from https://stackoverflow.com/a/9860911 @note ObjectType trick from https://stackoverflow.com/a/9860911
@endinternal @endinternal
@see [RFC 7159: The JavaScript Object Notation (JSON) Data Interchange @see [RFC 8259: The JavaScript Object Notation (JSON) Data Interchange
Format](http://rfc7159.net/rfc7159) Format](https://tools.ietf.org/html/rfc8259)
@since version 1.0.0 @since version 1.0.0
...@@ -425,7 +425,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -425,7 +425,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for an object @brief a type for an object
[RFC 7159](http://rfc7159.net/rfc7159) describes JSON objects as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON objects as follows:
> An object is an unordered collection of zero or more name/value pairs, > An object is an unordered collection of zero or more name/value pairs,
> where a name is a string and a value is a string, number, boolean, null, > where a name is a string and a value is a string, number, boolean, null,
> object, or array. > object, or array.
...@@ -479,7 +479,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -479,7 +479,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the maximum depth of nesting. > An implementation may set limits on the maximum depth of nesting.
In this class, the object's limit of nesting is not explicitly constrained. In this class, the object's limit of nesting is not explicitly constrained.
...@@ -502,7 +502,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -502,7 +502,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
name/value pairs in a different order than they were originally stored. In 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 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 `std::less` is used by default. Please note this behavior conforms to [RFC
7159](http://rfc7159.net/rfc7159), because any order implements the 8259](https://tools.ietf.org/html/rfc8259), because any order implements the
specified "unordered" nature of JSON objects. specified "unordered" nature of JSON objects.
*/ */
using object_t = ObjectType<StringType, using object_t = ObjectType<StringType,
...@@ -514,7 +514,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -514,7 +514,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for an array @brief a type for an array
[RFC 7159](http://rfc7159.net/rfc7159) describes JSON arrays as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON arrays as follows:
> An array is an ordered sequence of zero or more values. > An array is an ordered sequence of zero or more values.
To store objects in C++, a type is defined by the template parameters To store objects in C++, a type is defined by the template parameters
...@@ -538,7 +538,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -538,7 +538,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the maximum depth of nesting. > An implementation may set limits on the maximum depth of nesting.
In this class, the array's limit of nesting is not explicitly constrained. In this class, the array's limit of nesting is not explicitly constrained.
...@@ -560,7 +560,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -560,7 +560,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for a string @brief a type for a string
[RFC 7159](http://rfc7159.net/rfc7159) describes JSON strings as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON strings as follows:
> A string is a sequence of zero or more Unicode characters. > A string is a sequence of zero or more Unicode characters.
To store objects in C++, a type is defined by the template parameter To store objects in C++, a type is defined by the template parameter
...@@ -587,7 +587,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -587,7 +587,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#### String comparison #### String comparison
[RFC 7159](http://rfc7159.net/rfc7159) states: [RFC 8259](https://tools.ietf.org/html/rfc8259) states:
> Software implementations are typically required to test names of object > Software implementations are typically required to test names of object
> members for equality. Implementations that transform the textual > members for equality. Implementations that transform the textual
> representation into sequences of Unicode code units and then perform the > representation into sequences of Unicode code units and then perform the
...@@ -613,7 +613,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -613,7 +613,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for a boolean @brief a type for a boolean
[RFC 7159](http://rfc7159.net/rfc7159) implicitly describes a boolean as a [RFC 8259](https://tools.ietf.org/html/rfc8259) implicitly describes a boolean as a
type which differentiates the two literals `true` and `false`. type which differentiates the two literals `true` and `false`.
To store objects in C++, a type is defined by the template parameter @a To store objects in C++, a type is defined by the template parameter @a
...@@ -639,7 +639,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -639,7 +639,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for a number (integer) @brief a type for a number (integer)
[RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows:
> The representation of numbers is similar to that used in most > The representation of numbers is similar to that used in most
> programming languages. A number is represented in base 10 using decimal > programming languages. A number is represented in base 10 using decimal
> digits. It contains an integer component that may be prefixed with an > digits. It contains an integer component that may be prefixed with an
...@@ -677,7 +677,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -677,7 +677,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the range and precision of numbers. > An implementation may set limits on the range and precision of numbers.
When the default type is used, the maximal integer number that can be When the default type is used, the maximal integer number that can be
...@@ -688,7 +688,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -688,7 +688,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
will be automatically be stored as @ref number_unsigned_t or @ref will be automatically be stored as @ref number_unsigned_t or @ref
number_float_t. number_float_t.
[RFC 7159](http://rfc7159.net/rfc7159) further states: [RFC 8259](https://tools.ietf.org/html/rfc8259) further states:
> Note that when such software is used, numbers that are integers and are > Note that when such software is used, numbers that are integers and are
> in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense
> that implementations will agree exactly on their numeric values. > that implementations will agree exactly on their numeric values.
...@@ -711,7 +711,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -711,7 +711,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for a number (unsigned) @brief a type for a number (unsigned)
[RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows:
> The representation of numbers is similar to that used in most > The representation of numbers is similar to that used in most
> programming languages. A number is represented in base 10 using decimal > programming languages. A number is represented in base 10 using decimal
> digits. It contains an integer component that may be prefixed with an > digits. It contains an integer component that may be prefixed with an
...@@ -749,7 +749,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -749,7 +749,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the range and precision of numbers. > An implementation may set limits on the range and precision of numbers.
When the default type is used, the maximal integer number that can be When the default type is used, the maximal integer number that can be
...@@ -759,7 +759,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -759,7 +759,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
deserialization, too large or small integer numbers will be automatically deserialization, too large or small integer numbers will be automatically
be stored as @ref number_integer_t or @ref number_float_t. be stored as @ref number_integer_t or @ref number_float_t.
[RFC 7159](http://rfc7159.net/rfc7159) further states: [RFC 8259](https://tools.ietf.org/html/rfc8259) further states:
> Note that when such software is used, numbers that are integers and are > Note that when such software is used, numbers that are integers and are
> in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense
> that implementations will agree exactly on their numeric values. > that implementations will agree exactly on their numeric values.
...@@ -782,7 +782,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -782,7 +782,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for a number (floating-point) @brief a type for a number (floating-point)
[RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows:
> The representation of numbers is similar to that used in most > The representation of numbers is similar to that used in most
> programming languages. A number is represented in base 10 using decimal > programming languages. A number is represented in base 10 using decimal
> digits. It contains an integer component that may be prefixed with an > digits. It contains an integer component that may be prefixed with an
...@@ -820,7 +820,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -820,7 +820,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) states: [RFC 8259](https://tools.ietf.org/html/rfc8259) states:
> This specification allows implementations to set limits on the range and > This specification allows implementations to set limits on the range and
> precision of numbers accepted. Since software that implements IEEE > precision of numbers accepted. Since software that implements IEEE
> 754-2008 binary64 (double precision) numbers is generally available and > 754-2008 binary64 (double precision) numbers is generally available and
......
...@@ -6649,7 +6649,7 @@ class lexer : public lexer_base<BasicJsonType> ...@@ -6649,7 +6649,7 @@ class lexer : public lexer_base<BasicJsonType>
/*! /*!
@brief scan a string literal @brief scan a string literal
This function scans a string according to Sect. 7 of RFC 7159. While This function scans a string according to Sect. 7 of RFC 8259. While
scanning, bytes are escaped and copied into buffer token_buffer. Then the scanning, bytes are escaped and copied into buffer token_buffer. Then the
function returns successfully, token_buffer is *not* null-terminated (as it function returns successfully, token_buffer is *not* null-terminated (as it
may contain \0 bytes), and token_buffer.size() is the number of bytes in the may contain \0 bytes), and token_buffer.size() is the number of bytes in the
...@@ -7339,10 +7339,10 @@ class lexer : public lexer_base<BasicJsonType> ...@@ -7339,10 +7339,10 @@ class lexer : public lexer_base<BasicJsonType>
/*! /*!
@brief scan a number literal @brief scan a number literal
This function scans a string according to Sect. 6 of RFC 7159. This function scans a string according to Sect. 6 of RFC 8259.
The function is realized with a deterministic finite state machine derived The function is realized with a deterministic finite state machine derived
from the grammar described in RFC 7159. Starting in state "init", the from the grammar described in RFC 8259. Starting in state "init", the
input is read and used to determined the next state. Only state "done" input is read and used to determined the next state. Only state "done"
accepts the number. State "error" is a trap state to model errors. In the accepts the number. State "error" is a trap state to model errors. In the
table below, "anything" means any character but the ones listed before. table below, "anything" means any character but the ones listed before.
...@@ -17178,8 +17178,8 @@ The invariants are checked by member function assert_invariant(). ...@@ -17178,8 +17178,8 @@ The invariants are checked by member function assert_invariant().
@note ObjectType trick from https://stackoverflow.com/a/9860911 @note ObjectType trick from https://stackoverflow.com/a/9860911
@endinternal @endinternal
@see [RFC 7159: The JavaScript Object Notation (JSON) Data Interchange @see [RFC 8259: The JavaScript Object Notation (JSON) Data Interchange
Format](http://rfc7159.net/rfc7159) Format](https://tools.ietf.org/html/rfc8259)
@since version 1.0.0 @since version 1.0.0
...@@ -17440,7 +17440,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17440,7 +17440,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for an object @brief a type for an object
[RFC 7159](http://rfc7159.net/rfc7159) describes JSON objects as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON objects as follows:
> An object is an unordered collection of zero or more name/value pairs, > An object is an unordered collection of zero or more name/value pairs,
> where a name is a string and a value is a string, number, boolean, null, > where a name is a string and a value is a string, number, boolean, null,
> object, or array. > object, or array.
...@@ -17494,7 +17494,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17494,7 +17494,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the maximum depth of nesting. > An implementation may set limits on the maximum depth of nesting.
In this class, the object's limit of nesting is not explicitly constrained. In this class, the object's limit of nesting is not explicitly constrained.
...@@ -17517,7 +17517,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17517,7 +17517,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
name/value pairs in a different order than they were originally stored. In 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 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 `std::less` is used by default. Please note this behavior conforms to [RFC
7159](http://rfc7159.net/rfc7159), because any order implements the 8259](https://tools.ietf.org/html/rfc8259), because any order implements the
specified "unordered" nature of JSON objects. specified "unordered" nature of JSON objects.
*/ */
using object_t = ObjectType<StringType, using object_t = ObjectType<StringType,
...@@ -17529,7 +17529,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17529,7 +17529,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for an array @brief a type for an array
[RFC 7159](http://rfc7159.net/rfc7159) describes JSON arrays as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON arrays as follows:
> An array is an ordered sequence of zero or more values. > An array is an ordered sequence of zero or more values.
To store objects in C++, a type is defined by the template parameters To store objects in C++, a type is defined by the template parameters
...@@ -17553,7 +17553,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17553,7 +17553,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the maximum depth of nesting. > An implementation may set limits on the maximum depth of nesting.
In this class, the array's limit of nesting is not explicitly constrained. In this class, the array's limit of nesting is not explicitly constrained.
...@@ -17575,7 +17575,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17575,7 +17575,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for a string @brief a type for a string
[RFC 7159](http://rfc7159.net/rfc7159) describes JSON strings as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON strings as follows:
> A string is a sequence of zero or more Unicode characters. > A string is a sequence of zero or more Unicode characters.
To store objects in C++, a type is defined by the template parameter To store objects in C++, a type is defined by the template parameter
...@@ -17602,7 +17602,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17602,7 +17602,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#### String comparison #### String comparison
[RFC 7159](http://rfc7159.net/rfc7159) states: [RFC 8259](https://tools.ietf.org/html/rfc8259) states:
> Software implementations are typically required to test names of object > Software implementations are typically required to test names of object
> members for equality. Implementations that transform the textual > members for equality. Implementations that transform the textual
> representation into sequences of Unicode code units and then perform the > representation into sequences of Unicode code units and then perform the
...@@ -17628,7 +17628,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17628,7 +17628,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for a boolean @brief a type for a boolean
[RFC 7159](http://rfc7159.net/rfc7159) implicitly describes a boolean as a [RFC 8259](https://tools.ietf.org/html/rfc8259) implicitly describes a boolean as a
type which differentiates the two literals `true` and `false`. type which differentiates the two literals `true` and `false`.
To store objects in C++, a type is defined by the template parameter @a To store objects in C++, a type is defined by the template parameter @a
...@@ -17654,7 +17654,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17654,7 +17654,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for a number (integer) @brief a type for a number (integer)
[RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows:
> The representation of numbers is similar to that used in most > The representation of numbers is similar to that used in most
> programming languages. A number is represented in base 10 using decimal > programming languages. A number is represented in base 10 using decimal
> digits. It contains an integer component that may be prefixed with an > digits. It contains an integer component that may be prefixed with an
...@@ -17692,7 +17692,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17692,7 +17692,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the range and precision of numbers. > An implementation may set limits on the range and precision of numbers.
When the default type is used, the maximal integer number that can be When the default type is used, the maximal integer number that can be
...@@ -17703,7 +17703,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17703,7 +17703,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
will be automatically be stored as @ref number_unsigned_t or @ref will be automatically be stored as @ref number_unsigned_t or @ref
number_float_t. number_float_t.
[RFC 7159](http://rfc7159.net/rfc7159) further states: [RFC 8259](https://tools.ietf.org/html/rfc8259) further states:
> Note that when such software is used, numbers that are integers and are > Note that when such software is used, numbers that are integers and are
> in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense
> that implementations will agree exactly on their numeric values. > that implementations will agree exactly on their numeric values.
...@@ -17726,7 +17726,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17726,7 +17726,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for a number (unsigned) @brief a type for a number (unsigned)
[RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows:
> The representation of numbers is similar to that used in most > The representation of numbers is similar to that used in most
> programming languages. A number is represented in base 10 using decimal > programming languages. A number is represented in base 10 using decimal
> digits. It contains an integer component that may be prefixed with an > digits. It contains an integer component that may be prefixed with an
...@@ -17764,7 +17764,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17764,7 +17764,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) specifies: [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
> An implementation may set limits on the range and precision of numbers. > An implementation may set limits on the range and precision of numbers.
When the default type is used, the maximal integer number that can be When the default type is used, the maximal integer number that can be
...@@ -17774,7 +17774,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17774,7 +17774,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
deserialization, too large or small integer numbers will be automatically deserialization, too large or small integer numbers will be automatically
be stored as @ref number_integer_t or @ref number_float_t. be stored as @ref number_integer_t or @ref number_float_t.
[RFC 7159](http://rfc7159.net/rfc7159) further states: [RFC 8259](https://tools.ietf.org/html/rfc8259) further states:
> Note that when such software is used, numbers that are integers and are > Note that when such software is used, numbers that are integers and are
> in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense
> that implementations will agree exactly on their numeric values. > that implementations will agree exactly on their numeric values.
...@@ -17797,7 +17797,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17797,7 +17797,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/*! /*!
@brief a type for a number (floating-point) @brief a type for a number (floating-point)
[RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows:
> The representation of numbers is similar to that used in most > The representation of numbers is similar to that used in most
> programming languages. A number is represented in base 10 using decimal > programming languages. A number is represented in base 10 using decimal
> digits. It contains an integer component that may be prefixed with an > digits. It contains an integer component that may be prefixed with an
...@@ -17835,7 +17835,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec ...@@ -17835,7 +17835,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#### Limits #### Limits
[RFC 7159](http://rfc7159.net/rfc7159) states: [RFC 8259](https://tools.ietf.org/html/rfc8259) states:
> This specification allows implementations to set limits on the range and > This specification allows implementations to set limits on the range and
> precision of numbers accepted. Since software that implements IEEE > precision of numbers accepted. Since software that implements IEEE
> 754-2008 binary64 (double precision) numbers is generally available and > 754-2008 binary64 (double precision) numbers is generally available and
......
...@@ -589,7 +589,7 @@ TEST_CASE("parser class") ...@@ -589,7 +589,7 @@ TEST_CASE("parser class")
SECTION("edge cases") SECTION("edge cases")
{ {
// From RFC7159, Section 6: // From RFC8259, Section 6:
// Note that when such software is used, numbers that are // Note that when such software is used, numbers that are
// integers and are in the range [-(2**53)+1, (2**53)-1] // integers and are in the range [-(2**53)+1, (2**53)-1]
// are interoperable in the sense that implementations will // are interoperable in the sense that implementations will
...@@ -603,7 +603,7 @@ TEST_CASE("parser class") ...@@ -603,7 +603,7 @@ TEST_CASE("parser class")
SECTION("over the edge cases") // issue #178 - Integer conversion to unsigned (incorrect handling of 64 bit integers) SECTION("over the edge cases") // issue #178 - Integer conversion to unsigned (incorrect handling of 64 bit integers)
{ {
// While RFC7159, Section 6 specifies a preference for support // While RFC8259, Section 6 specifies a preference for support
// for ranges in range of IEEE 754-2008 binary64 (double precision) // for ranges in range of IEEE 754-2008 binary64 (double precision)
// this does not accommodate 64 bit integers without loss of accuracy. // this does not accommodate 64 bit integers without loss of accuracy.
// As 64 bit integers are now widely used in software, it is desirable // As 64 bit integers are now widely used in software, it is desirable
...@@ -888,7 +888,7 @@ TEST_CASE("parser class") ...@@ -888,7 +888,7 @@ TEST_CASE("parser class")
SECTION("edge cases") SECTION("edge cases")
{ {
// From RFC7159, Section 6: // From RFC8259, Section 6:
// Note that when such software is used, numbers that are // Note that when such software is used, numbers that are
// integers and are in the range [-(2**53)+1, (2**53)-1] // integers and are in the range [-(2**53)+1, (2**53)-1]
// are interoperable in the sense that implementations will // are interoperable in the sense that implementations will
...@@ -902,7 +902,7 @@ TEST_CASE("parser class") ...@@ -902,7 +902,7 @@ TEST_CASE("parser class")
SECTION("over the edge cases") // issue #178 - Integer conversion to unsigned (incorrect handling of 64 bit integers) SECTION("over the edge cases") // issue #178 - Integer conversion to unsigned (incorrect handling of 64 bit integers)
{ {
// While RFC7159, Section 6 specifies a preference for support // While RFC8259, Section 6 specifies a preference for support
// for ranges in range of IEEE 754-2008 binary64 (double precision) // for ranges in range of IEEE 754-2008 binary64 (double precision)
// this does not accommodate 64 bit integers without loss of accuracy. // this does not accommodate 64 bit integers without loss of accuracy.
// As 64 bit integers are now widely used in software, it is desirable // As 64 bit integers are now widely used in software, it is desirable
......
...@@ -418,9 +418,9 @@ TEST_CASE("json.org examples") ...@@ -418,9 +418,9 @@ TEST_CASE("json.org examples")
} }
} }
TEST_CASE("RFC 7159 examples") TEST_CASE("RFC 8259 examples")
{ {
// here, we list all JSON values from the RFC 7159 document // here, we list all JSON values from the RFC 8259 document
SECTION("7. Strings") SECTION("7. Strings")
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment