Files
json/docs/mkdocs/docs/api/view_mode.md
T
Niels Lohmann 266432ea65 json_view: view_mode enum instead of bool Editable, node_kind for node::kind
basic_json_document and basic_json_view take a view_mode (read_only, the
default, or editable) instead of a bool: basic_json_document<json, true>
did not say what true means. The shortcut aliases are unchanged.

The kind of a node is a node_kind (the value_t values plus link, 10 as
before), which removes the static_cast<std::uint8_t>(value_t::...) of
every comparison. The node and image layouts are unchanged.

Signed-off-by: Niels Lohmann <mail@nlohmann.me>
2026-10-25 20:41:47 +01:00

2.8 KiB

nlohmann::view_mode

Defined in header <nlohmann/json_view.hpp>

enum class view_mode : std::uint8_t
{
    read_only,
    editable
};

The second template parameter of basic_json_document and basic_json_view: whether a document can be changed after parsing, and whether a view is of such a document.

read_only
the default: the document is parsed once and then only read. It carries none of the bookkeeping edits need, and calling set, push_back, insert, or erase on it fails to compile.
editable
the document also offers set, push_back, insert, and erase; its views see every edit, see Edits.

The shortcuts name both modes: json_document and json_view are read-only, json_editable_document and json_editable_view are editable (and likewise for ordered_json).

Notes

The mode is part of the view's type, and there is no conversion between the two modes: a read-only view reads a container in place, while a view of an editable document follows the links that edits leave behind. A function that accepts views therefore names the modes it accepts in its signature:

// views of editable documents only
template<typename BasicJsonType>
void f(basic_json_view<BasicJsonType, view_mode::editable> v);

// views of read-only documents only
template<typename BasicJsonType>
void f(basic_json_view<BasicJsonType, view_mode::read_only> v);

// either
template<typename BasicJsonType, view_mode Mode>
void f(basic_json_view<BasicJsonType, Mode> v);

A function that takes a json_view accepts neither an ordered_json_view nor a json_editable_view. Views of the two modes still compare with operator==.

Examples

??? example

The example below shows a function template that accepts the views of both modes, and one that accepts only
views of editable documents.

```cpp
--8<-- "examples/view_mode.cpp"
```

Output:

```
--8<-- "examples/view_mode.output"
```

See also

Version history

Added in version 3.13.0.