nlohmann::basic_json::accept¶
// (1)
template<typenameInputType>
staticboolaccept(InputType&&i,
constboolignore_comments=false,
constboolignore_trailing_commas=false);
// (2)
template<typenameIteratorType>
staticboolaccept(IteratorTypefirst,IteratorTypelast,
constboolignore_comments=false,
constboolignore_trailing_commas=false);
Checks whether the input is valid JSON.
- Reads from a compatible input.
-
Reads from a pair of character iterators
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() function, this function neither throws an exception in case of invalid JSON input (i.e., a parse error) nor creates diagnostic information.
Template parameters¶
InputType-
A compatible input, for instance:
- an
std::istreamobject - a
FILEpointer (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 - an object
objfor whichbegin(obj)andend(obj)produces a valid pair of iterators.
- an
IteratorType-
a compatible iterator type, for instance.
- a pair of
std::string::iteratororstd::vector<std::uint8_t>::iterator - a pair of pointers such as
ptrandptr + len
- a pair of
Parameters¶
i(in)- Input to parse from.
ignore_comments(in)- whether comments should be ignored and treated like whitespace (
true) or yield a parse error (false); (optional,falseby default) ignore_trailing_commas(in)- whether trailing commas in arrays or objects should be ignored and treated like whitespace (
true) or yield a parse error (false); (optional,falseby default) first(in)- iterator to the start of the character range
last(in)- iterator to the end of the character range
Return value¶
Whether the input is valid JSON.
Exception safety¶
Strong guarantee: if an exception is thrown, there are no changes in the JSON value.
Exceptions¶
Throws parse_error.101 in case of an empty input like a null FILE* or char* pointer.
Complexity¶
Linear in the length of the input. The parser is a predictive LL(1) parser.
Notes¶
A UTF-8 byte order mark is silently ignored.
Examples¶
Example
The example below demonstrates the accept() function reading from a string.
#include<iostream>
#include<iomanip>
#include<nlohmann/json.hpp>
usingjson=nlohmann::json;
intmain()
{
// a valid JSON text
autovalid_text=R"(
{
"numbers": [1, 2, 3]
}
)";
// an invalid JSON text
autoinvalid_text=R"(
{
"strings": ["extra", "comma", ]
}
)";
std::cout<<std::boolalpha
<<json::accept(valid_text)<<' '
<<json::accept(invalid_text)<<'\n';
}
Output:
truefalse
See also¶
- parse - deserialize from a compatible input
- sax_parse - parse input using the SAX interface
- operator>> - deserialize from stream
Version history¶
- Added in version 3.0.0.
- Ignoring comments via
ignore_commentsadded in version 3.9.0. - Changed runtime assertion in case of
FILE*null pointers to exception in version 3.12.0. - Added
ignore_trailing_commasin version 3.12.x.
Deprecation
Overload (2) replaces calls to accept with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like accept({ptr,ptr+len},...); with accept(ptr,ptr+len,...);.
You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.