mirror of
https://github.com/nlohmann/json.git
synced 2026-10-12 10:13:13 +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.6 KiB
1.6 KiB
nlohmann::basic_json_view::is_discarded
bool is_discarded() const noexcept;
Returns whether this view is invalid, i.e. does not refer to a value. This is the case for a default-constructed
view (see (constructor)), and for root() of a document
that is itself discarded -- in particular, the root of a failed
parse() with allow_exceptions set to #!cpp false.
Return value
#!cpp true if the view is discarded, #!cpp false otherwise.
Exception safety
No-throw guarantee: this function never throws exceptions.
Complexity
Constant.
Notes
#!cpp v.is_discarded() and #!cpp !static_cast<bool>(v) are equivalent; use whichever reads better at the call
site.
Examples
??? example
The example below classifies several parsed documents by the type of their root value, without materializing any
of them into a `BasicJsonType` value.
```cpp
--8<-- "examples/basic_json_view__type_predicates.cpp"
```
Output:
```json
--8<-- "examples/basic_json_view__type_predicates.output"
```
See also
- operator bool - return whether the view refers to a value
- (constructor) - the default constructor creates a discarded view
- is_discarded (basic_json_document) - return whether the last parse failed
BasicJsonType::is_discarded- the corresponding function ofbasic_json
Version history
- Added in version 3.13.0.