Files
json/docs/mkdocs/docs/api/view_mode.md
T
Niels Lohmann 20e022655d json_view: node_kind in the node writers, spell out read_only, comment fixes
The builder and the edit functions take and store a node_kind instead of
casting a value_t; the numbering assertions and the comments now speak of
node_kind, and the link kind notes that it follows value_t::discarded.
The read-only aliases name view_mode::read_only like the editable ones.
view_mode.md says the mode is a compile-time property of the type.

Signed-off-by: Niels Lohmann <mail@nlohmann.me>
2026-10-26 07:12:05 +01:00

2.9 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 a compile-time property of the document's and the view's type, not a setting of a call, 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.