Files
json/docs/mkdocs/docs/api/basic_json_view/is_discarded.md
Niels Lohmann 0eaea7ccba Make view lookups last-wins and chained access safe
* Lookups (operator[], at, find, contains, count, value, JSON pointers)
  return the last member of a duplicate key, as materialize() and
  parse() keep it.
* operator[] on a discarded view returns a discarded view instead of
  throwing, so v["a"]["b"] is safe for a missing "a".
* operator[] and at() take any integer type (not only int and size_t),
  fixing ambiguous calls with unsigned, long, std::int64_t, ...
* Fix the operator[] documentation, which claimed a discarded view for
  a type mismatch where type_error.305 is thrown.

Signed-off-by: Niels Lohmann <mail@nlohmann.me>
2026-10-11 11:30:34 +02:00

2.1 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.

A discarded view is also what operator[] returns for a missing key, an index out of range, or a JSON pointer that cannot be resolved, and for any access on a view that is itself discarded (so a chain such as #!cpp v["a"]["b"] is safe). at throws instead.

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

A basic_json_view is not convertible to #!cpp bool: such a conversion would mean "refers to a value", whereas basic_json converts to the #!cpp bool it holds, so the same code would silently behave differently. Test #!cpp !v.is_discarded() explicitly.

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

Version history

  • Added in version 3.13.0.