Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
json
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
json
Commits
b9d76516
Unverified
Commit
b9d76516
authored
Aug 20, 2020
by
Niels Lohmann
Committed by
GitHub
Aug 20, 2020
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2363 from nlohmann/issue2360
Fix and extend documentation of discarded values
parents
3be6ee35
9d81eedb
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
112 additions
and
27 deletions
+112
-27
doc/examples/parse__allow_exceptions.cpp
doc/examples/parse__allow_exceptions.cpp
+36
-0
doc/examples/parse__allow_exceptions.link
doc/examples/parse__allow_exceptions.link
+1
-0
doc/examples/parse__allow_exceptions.output
doc/examples/parse__allow_exceptions.output
+2
-0
doc/mkdocs/docs/api/basic_json/exception.md
doc/mkdocs/docs/api/basic_json/exception.md
+1
-1
doc/mkdocs/docs/api/basic_json/from_bson.md
doc/mkdocs/docs/api/basic_json/from_bson.md
+1
-1
doc/mkdocs/docs/api/basic_json/from_cbor.md
doc/mkdocs/docs/api/basic_json/from_cbor.md
+1
-1
doc/mkdocs/docs/api/basic_json/from_msgpack.md
doc/mkdocs/docs/api/basic_json/from_msgpack.md
+1
-1
doc/mkdocs/docs/api/basic_json/from_ubjson.md
doc/mkdocs/docs/api/basic_json/from_ubjson.md
+1
-1
doc/mkdocs/docs/api/basic_json/invalid_iterator.md
doc/mkdocs/docs/api/basic_json/invalid_iterator.md
+1
-1
doc/mkdocs/docs/api/basic_json/is_discarded.md
doc/mkdocs/docs/api/basic_json/is_discarded.md
+30
-3
doc/mkdocs/docs/api/basic_json/operator_eq.md
doc/mkdocs/docs/api/basic_json/operator_eq.md
+14
-9
doc/mkdocs/docs/api/basic_json/other_error.md
doc/mkdocs/docs/api/basic_json/other_error.md
+1
-1
doc/mkdocs/docs/api/basic_json/out_of_range.md
doc/mkdocs/docs/api/basic_json/out_of_range.md
+1
-1
doc/mkdocs/docs/api/basic_json/parse.md
doc/mkdocs/docs/api/basic_json/parse.md
+19
-5
doc/mkdocs/docs/api/basic_json/parse_error.md
doc/mkdocs/docs/api/basic_json/parse_error.md
+1
-1
doc/mkdocs/docs/api/basic_json/type_error.md
doc/mkdocs/docs/api/basic_json/type_error.md
+1
-1
No files found.
doc/examples/parse__allow_exceptions.cpp
0 → 100644
View file @
b9d76516
#include <iostream>
#include <nlohmann/json.hpp>
using
json
=
nlohmann
::
json
;
int
main
()
{
// an invalid JSON text
std
::
string
text
=
R"(
{
"key": "value without closing quotes
}
)"
;
// parse with exceptions
try
{
json
j
=
json
::
parse
(
text
);
}
catch
(
json
::
parse_error
&
e
)
{
std
::
cout
<<
e
.
what
()
<<
std
::
endl
;
}
// parse without exceptions
json
j
=
json
::
parse
(
text
,
nullptr
,
false
);
if
(
j
.
is_discarded
())
{
std
::
cout
<<
"the input is invalid JSON"
<<
std
::
endl
;
}
else
{
std
::
cout
<<
"the input is valid JSON: "
<<
j
<<
std
::
endl
;
}
}
doc/examples/parse__allow_exceptions.link
0 → 100644
View file @
b9d76516
<a target="_blank" href="https://wandbox.org/permlink/2TsG4VSg87HsRQC9"><b>online</b></a>
\ No newline at end of file
doc/examples/parse__allow_exceptions.output
0 → 100644
View file @
b9d76516
[json.exception.parse_error.101] parse error at line 4, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \u000A or \n; last read: '"value without closing quotes<U+000A>'
the input is invalid JSON
doc/mkdocs/docs/api/basic_json/exception.md
View file @
b9d76516
# basic_
basic_
json::exception
# basic_json::exception
```
cpp
class
exception
:
public
std
::
exception
;
...
...
doc/mkdocs/docs/api/basic_json/from_bson.md
View file @
b9d76516
...
...
@@ -52,7 +52,7 @@ Deserializes a given input to a JSON value using the BSON (Binary JSON) serializ
## 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`
.
`value_t::discarded`
.
The latter can be checked with
[
`is_discarded`
](
is_discarded.md
)
.
## Exception safety
...
...
doc/mkdocs/docs/api/basic_json/from_cbor.md
View file @
b9d76516
...
...
@@ -59,7 +59,7 @@ Deserializes a given input to a JSON value using the CBOR (Concise Binary Object
## 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`
.
`value_t::discarded`
.
The latter can be checked with
[
`is_discarded`
](
is_discarded.md
)
.
## Exception safety
...
...
doc/mkdocs/docs/api/basic_json/from_msgpack.md
View file @
b9d76516
...
...
@@ -52,7 +52,7 @@ Deserializes a given input to a JSON value using the MessagePack serialization 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`
.
`value_t::discarded`
.
The latter can be checked with
[
`is_discarded`
](
is_discarded.md
)
.
## Exception safety
...
...
doc/mkdocs/docs/api/basic_json/from_ubjson.md
View file @
b9d76516
...
...
@@ -52,7 +52,7 @@ Deserializes a given input to a JSON value using the UBJSON (Universal Binary JS
## 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`
.
`value_t::discarded`
.
The latter can be checked with
[
`is_discarded`
](
is_discarded.md
)
.
## Exception safety
...
...
doc/mkdocs/docs/api/basic_json/invalid_iterator.md
View file @
b9d76516
# basic_
basic_
json::invalid_iterator
# basic_json::invalid_iterator
```
cpp
class
invalid_iterator
:
public
exception
;
...
...
doc/mkdocs/docs/api/basic_json/is_discarded.md
View file @
b9d76516
...
...
@@ -4,9 +4,12 @@
constexpr
bool
is_discarded
()
const
noexcept
;
```
This function returns true if and only if the JSON value was discarded during parsing with a callback function (see
[
`parser_callback_t`
](
parser_callback_t.md
)
).
This function returns
`#!cpp true`
for a JSON value if either:
-
the value was discarded during parsing with a callback function (see
[
`parser_callback_t`
](
parser_callback_t.md
)
), or
-
the value is the result of parsing invalid JSON with parameter
`allow_exceptions`
set to
`#!cpp false`
; see
[
`parse`
](
parse.md
)
for more information.
## Return value
`#!cpp true`
if type is discarded,
`#!cpp false`
otherwise.
...
...
@@ -21,6 +24,30 @@ Constant.
## Notes
!!! note
Discarded values are never compared equal with [`operator==`](operator_eq.md). That is, checking whether a JSON
value `j` is discarded will only work via:
```cpp
j.is_discarded()
```
because
```cpp
j == json::value_t::discarded
```
will always be `#!cpp false`.
!!! note
When a value is discarded by a callback function (see [`parser_callback_t`](parser_callback_t.md)) during parsing,
then it is removed when it is part of a structured value. For instance, if the second value of an array is discared,
instead of `#!json [null, discarded, false]`, the array `#!json [null, false]` is returned. Only if the top-level
value is discarded, the return value of the `parse` call is discarded.
This function will always be
`#!cpp false`
for JSON values after parsing. That is, discarded values can only occur
during parsing, but will be removed when inside a structured value or replaced by null in other cases.
...
...
doc/mkdocs/docs/api/basic_json/operator_eq.md
View file @
b9d76516
...
...
@@ -12,11 +12,10 @@ bool operator==(ScalarType lhs, const const_reference rhs) noexcept;
Compares two JSON values for equality according to the following rules:
-
Two JSON values are equal if (1) they are
from the same type and (2) their stored values are the same according to
their respective
`operator==`
.
-
Two JSON values are equal if (1) they are
not discarded, (2) they are from the same type, and (3) their stored values
are the same according to
their respective
`operator==`
.
-
Integer and floating-point numbers are automatically converted before comparison. Note that two NaN values are always
treated as unequal.
-
Two JSON null values are equal.
## Template parameters
...
...
@@ -45,11 +44,19 @@ Linear.
## Notes
-
Floating-point inside JSON values numbers are compared with
`json::number_float_t::operator==`
which is
`double::operator==`
by default. To compare floating-point while respecting an epsilon, an alternative
[
comparison function
](
https://github.com/mariokonrad/marnav/blob/master/include/marnav/math/floatingpoint.hpp#L34-#L39
)
could be used, for instance
!!! note
- NaN values never compare equal to themselves or to other NaN values.
- JSON `#!cpp null` values are all equal.
- Discarded values never compare equal to themselves.
!!! note
Floating-point numbers inside JSON values numbers are compared with `json::number_float_t::operator==` which is
`double::operator==` by default. To compare floating-point while respecting an epsilon, an alternative
[comparison function](https://github.com/mariokonrad/marnav/blob/master/include/marnav/math/floatingpoint.hpp#L34-#L39)
could be used, for instance
```cpp
template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>
inline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept
...
...
@@ -78,8 +85,6 @@ Linear.
}
```
-
NaN values never compare equal to themselves or to other NaN values.
## Example
??? example
...
...
doc/mkdocs/docs/api/basic_json/other_error.md
View file @
b9d76516
# basic_
basic_
json::other_error
# basic_json::other_error
```
cpp
class
other_error
:
public
exception
;
...
...
doc/mkdocs/docs/api/basic_json/out_of_range.md
View file @
b9d76516
# basic_
basic_
json::out_of_range
# basic_json::out_of_range
```
cpp
class
out_of_range
:
public
exception
;
...
...
doc/mkdocs/docs/api/basic_json/parse.md
View file @
b9d76516
...
...
@@ -61,7 +61,7 @@ static basic_json parse(IteratorType first, IteratorType last,
## 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`
.
`value_t::discarded`
.
The latter can be checked with
[
`is_discarded`
](
is_discarded.md
)
.
## Exception safety
...
...
@@ -79,7 +79,7 @@ super-linear complexity.
## Examples
??? example
??? example
"Parsing from a charater array"
The example below demonstrates the `parse()` function reading from an array.
...
...
@@ -93,7 +93,7 @@ super-linear complexity.
--8<-- "examples/parse__array__parser_callback_t.output"
```
??? example
??? example
"Parsing from a string"
The example below demonstrates the `parse()` function with and without callback function.
...
...
@@ -107,7 +107,7 @@ super-linear complexity.
--8<-- "examples/parse__string__parser_callback_t.output"
```
??? example
??? example
"Parsing from an input stream"
The example below demonstrates the `parse()` function with and without callback function.
...
...
@@ -121,7 +121,7 @@ super-linear complexity.
--8<-- "examples/parse__istream__parser_callback_t.output"
```
??? example
??? example
"Parsing from a contiguous container"
The example below demonstrates the `parse()` function reading from a contiguous container.
...
...
@@ -135,6 +135,20 @@ super-linear complexity.
--8<-- "examples/parse__contiguouscontainer__parser_callback_t.output"
```
??? example "Effect of
`allow_exceptions`
parameter"
The example below demonstrates the effect of the `allow_exceptions` parameter in the ´parse()` function.
```cpp
--8<-- "examples/parse__allow_exceptions.cpp"
```
Output:
```json
--8<-- "examples/parse__allow_exceptions.output"
```
## Version history
-
Added in version 1.0.0.
...
...
doc/mkdocs/docs/api/basic_json/parse_error.md
View file @
b9d76516
# basic_
basic_
json::parse_error
# basic_json::parse_error
```
cpp
class
parse_error
:
public
exception
;
...
...
doc/mkdocs/docs/api/basic_json/type_error.md
View file @
b9d76516
# basic_
basic_
json::type_error
# basic_json::type_error
```
cpp
class
type_error
:
public
exception
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment