mirror of
https://github.com/nlohmann/json.git
synced 2026-10-06 14:40:32 +00:00
Add json_document and json_view, a read-only, zero-copy index of a JSON text, as the first public slice of the zero-copy view (#5295). A parse produces a flat array of 16-byte nodes in document order, one per value and one per object key. Strings stay in the source text; escaped strings are decoded into an arena. Integers are converted while their digits are in the cache; floats keep only their digit layout and are converted on read. Containers store the size of their subtree, so a reader can step over one in constant time. A document makes a handful of allocations, however many values it has. The parser accepts exactly what json::parse accepts, with every combination of ignore_comments and ignore_trailing_commas, with and without a trailing NUL, and under JSON_STRICT_NUL_HANDLING. It is portable C++11 and does not depend on byte order. basic_json_document adds parse, parse_copy, accept, read (reuses a document's memory), root, is_discarded, source, owns_source, node_count, memory_usage, and shrink_to_fit. basic_json_view adds type, the is_* queries, operator bool, size, empty, materialize, and source_offset. A parse error throws the same exception basic_json::parse would throw for the same input, message and position included. detail::abi_config keeps JSON_STRICT_NUL_HANDLING and JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON readable after json.hpp undefines them, in the ABI namespace so they always match the basic_json in use. A NUL byte that ends a // comment is the end of the input, as in parse() since #5696. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
1.9 KiB
1.9 KiB
nlohmann::basic_json::is_primitive
constexpr bool is_primitive() const noexcept;
This function returns #!cpp true if and only if the JSON type is primitive (string, number, boolean, #!json null,
binary).
Return value
#!cpp true if type is primitive (string, number, boolean, #!json null, or binary), #!cpp false otherwise.
Exception safety
No-throw guarantee: this member function never throws exceptions.
Complexity
Constant.
Possible implementation
constexpr bool is_primitive() const noexcept
{
return is_null() || is_string() || is_boolean() || is_number() || is_binary();
}
Notes
The term primitive stems from RFC 8259:
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,
is_primitive() returns #!cpp true for binary values.
Examples
??? example
The following code exemplifies `is_primitive()` for all JSON types.
```cpp
--8<-- "examples/is_primitive.cpp"
```
Output:
```json
--8<-- "examples/is_primitive.output"
```
See also
- is_structured() returns whether the JSON value is structured
- is_null() returns whether the JSON value is
null - is_string() returns whether the JSON value is a string
- is_boolean() returns whether the JSON value is a boolean
- is_number() returns whether the JSON value is a number
- is_binary() returns whether the JSON value is a binary array
- basic_json_view::is_primitive - the same check on a zero-copy view
Version history
- Added in version 1.0.0.
- Extended to return
#!cpp truefor binary types in version 3.8.0.