Skip to content

Commit

Permalink
🔨 clean up
Browse files Browse the repository at this point in the history
  • Loading branch information
nlohmann committed Jun 22, 2020
1 parent e22ce45 commit 65e8ee9
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 44 deletions.
8 changes: 2 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1508,7 +1508,7 @@ The library supports **Unicode input** as follows:
### Comments in JSON
This library does not support comments. It does so for three reasons:
This library does not support comments by default. It does so for three reasons:
1. Comments are not part of the [JSON specification](https://tools.ietf.org/html/rfc8259). You may argue that `//` or `/* */` are allowed in JavaScript, but JSON is not JavaScript.
2. This was not an oversight: Douglas Crockford [wrote on this](https://plus.google.com/118095276221607585885/posts/RK8qyGVaGSr) in May 2012:
Expand All @@ -1519,11 +1519,7 @@ This library does not support comments. It does so for three reasons:
3. It is dangerous for interoperability if some libraries would add comment support while others don't. Please check [The Harmful Consequences of the Robustness Principle](https://tools.ietf.org/html/draft-iab-protocol-maintenance-01) on this.
This library will not support comments in the future. If you wish to use comments, I see three options:
1. Strip comments before using this library.
2. Use a different JSON library with comment support.
3. Use a format that natively supports comments (e.g., YAML or JSON5).
However, you can pass set parameter `ignore_comments` to true in the `parse` function to ignore `//` or `/* */` comments. Comments will then be treated as whitespace.
### Order of object keys
Expand Down
21 changes: 11 additions & 10 deletions include/nlohmann/detail/input/lexer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1489,6 +1489,15 @@ class lexer : public lexer_base<BasicJsonType>
return true;
}

void skip_whitespace()
{
do
{
get();
}
while (current == ' ' or current == '\t' or current == '\n' or current == '\r');
}

token_type scan()
{
// initially, skip the BOM
Expand All @@ -1499,11 +1508,7 @@ class lexer : public lexer_base<BasicJsonType>
}

// read next character and ignore whitespace
do
{
get();
}
while (current == ' ' or current == '\t' or current == '\n' or current == '\r');
skip_whitespace();

// ignore comments
if (ignore_comments and current == '/')
Expand All @@ -1514,11 +1519,7 @@ class lexer : public lexer_base<BasicJsonType>
}

// skip following whitespace
do
{
get();
}
while (current == ' ' or current == '\t' or current == '\n' or current == '\r');
skip_whitespace();
}

switch (current)
Expand Down
21 changes: 12 additions & 9 deletions include/nlohmann/json.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6565,8 +6565,9 @@ class basic_json
(optional)
@param[in] allow_exceptions whether to throw exceptions in case of a
parse error (optional, true by default)
@param[in] ignore_comments whether comments should be ignored (true) or
yield a parse error (true); (optional, false by default)
@param[in] ignore_comments whether comments should be ignored and treated
like whitespace (true) or yield a parse error (true); (optional, false by
default)
@return deserialized JSON value; in case of a parse error and
@a allow_exceptions set to `false`, the return value will be
Expand Down Expand Up @@ -6623,8 +6624,9 @@ class basic_json
(optional)
@param[in] allow_exceptions whether to throw exceptions in case of a
parse error (optional, true by default)
@param[in] ignore_comments whether comments should be ignored (true) or
yield a parse error (true); (optional, false by default)
@param[in] ignore_comments whether comments should be ignored and treated
like whitespace (true) or yield a parse error (true); (optional, false by
default)
@return deserialized JSON value; in case of a parse error and
@a allow_exceptions set to `false`, the return value will be
Expand Down Expand Up @@ -6676,8 +6678,9 @@ class basic_json
iterators.
@param[in] i input to read from
@param[in] ignore_comments whether comments should be ignored (true) or
yield a parse error (true); (optional, false by default)
@param[in] ignore_comments whether comments should be ignored and treated
like whitespace (true) or yield a parse error (true); (optional, false by
default)
@return Whether the input read from @a i is valid JSON.
Expand Down Expand Up @@ -6728,9 +6731,9 @@ class basic_json
@param[in,out] sax SAX event listener
@param[in] format the format to parse (JSON, CBOR, MessagePack, or UBJSON)
@param[in] strict whether the input has to be consumed completely
@param[in] ignore_comments whether comments should be ignored (true) or
yield a parse error (true); (optional, false by default); only applieds to
the JSON file format.
@param[in] ignore_comments whether comments should be ignored and treated
like whitespace (true) or yield a parse error (true); (optional, false by
default); only applies to the JSON file format.
@return return value of the last processed SAX event
Expand Down
42 changes: 23 additions & 19 deletions single_include/nlohmann/json.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9556,6 +9556,15 @@ class lexer : public lexer_base<BasicJsonType>
return true;
}

void skip_whitespace()
{
do
{
get();
}
while (current == ' ' or current == '\t' or current == '\n' or current == '\r');
}

token_type scan()
{
// initially, skip the BOM
Expand All @@ -9566,11 +9575,7 @@ class lexer : public lexer_base<BasicJsonType>
}

// read next character and ignore whitespace
do
{
get();
}
while (current == ' ' or current == '\t' or current == '\n' or current == '\r');
skip_whitespace();

// ignore comments
if (ignore_comments and current == '/')
Expand All @@ -9581,11 +9586,7 @@ class lexer : public lexer_base<BasicJsonType>
}

// skip following whitespace
do
{
get();
}
while (current == ' ' or current == '\t' or current == '\n' or current == '\r');
skip_whitespace();
}

switch (current)
Expand Down Expand Up @@ -22451,8 +22452,9 @@ class basic_json
(optional)
@param[in] allow_exceptions whether to throw exceptions in case of a
parse error (optional, true by default)
@param[in] ignore_comments whether comments should be ignored (true) or
yield a parse error (true); (optional, false by default)
@param[in] ignore_comments whether comments should be ignored and treated
like whitespace (true) or yield a parse error (true); (optional, false by
default)

@return deserialized JSON value; in case of a parse error and
@a allow_exceptions set to `false`, the return value will be
Expand Down Expand Up @@ -22509,8 +22511,9 @@ class basic_json
(optional)
@param[in] allow_exceptions whether to throw exceptions in case of a
parse error (optional, true by default)
@param[in] ignore_comments whether comments should be ignored (true) or
yield a parse error (true); (optional, false by default)
@param[in] ignore_comments whether comments should be ignored and treated
like whitespace (true) or yield a parse error (true); (optional, false by
default)

@return deserialized JSON value; in case of a parse error and
@a allow_exceptions set to `false`, the return value will be
Expand Down Expand Up @@ -22562,8 +22565,9 @@ class basic_json
iterators.

@param[in] i input to read from
@param[in] ignore_comments whether comments should be ignored (true) or
yield a parse error (true); (optional, false by default)
@param[in] ignore_comments whether comments should be ignored and treated
like whitespace (true) or yield a parse error (true); (optional, false by
default)

@return Whether the input read from @a i is valid JSON.

Expand Down Expand Up @@ -22614,9 +22618,9 @@ class basic_json
@param[in,out] sax SAX event listener
@param[in] format the format to parse (JSON, CBOR, MessagePack, or UBJSON)
@param[in] strict whether the input has to be consumed completely
@param[in] ignore_comments whether comments should be ignored (true) or
yield a parse error (true); (optional, false by default); only applieds to
the JSON file format.
@param[in] ignore_comments whether comments should be ignored and treated
like whitespace (true) or yield a parse error (true); (optional, false by
default); only applies to the JSON file format.

@return return value of the last processed SAX event

Expand Down

0 comments on commit 65e8ee9

Please sign in to comment.