Files
json/docs/mkdocs/docs/api/basic_json_view/get_to.md
T
Niels Lohmann f64464daf1 Split the json_view feature page into sub-pages
The single features/json_view.md page grew to ~600 lines covering eight
topics. Split it into features/json_view/ with an overview page and
pages for ownership and lifetime, differences from basic_json, reading
values, generic code, editing, and images.

The new differences page collects what was spread over several sections
("What is the same", "What is different", "Duplicate keys", and notes in
the conversion and serialization sections) under one summary table, and
adds the parts of the basic_json interface a view does not have. The
other pages now link to it instead of restating the rules.

Internal links across the documentation point to the new pages.

Signed-off-by: Niels Lohmann <mail@nlohmann.me>
2026-11-02 20:42:55 +01:00

2.9 KiB

nlohmann::basic_json_view::get_to

template<typename T>
T& get_to(T& v) const;

Converts the value to T and stores it in v, in one of three ways:

  • For the types that get<T>() converts directly — arithmetic types, #!cpp bool, #!cpp std::nullptr_t, string_view_t, #!cpp std::basic_string, BasicJsonType, basic_json_view, vectors of these, and maps of views — v is assigned: #!cpp v = get<T>().
  • For a type whose from_json() accepts views (see get<T>()), that from_json() is called with the view and the existing v, without building a BasicJsonType value.
  • For every other type, the subtree is built into a BasicJsonType value and #!cpp materialize().get_to(v) is called, i.e. from_json() is invoked with the existing v, exactly as BasicJsonType::get_to() does.

Template parameters

T
the type to convert the value to

Parameters

v (out)
the variable to store the converted value in

Return value

v, allowing calls to chain

Exception safety

  • For the directly converted types: strong exception safety. If an exception is thrown, v is not modified.
  • For every other type: as for BasicJsonType::get_to(). materialize() throws before v is touched, but a from_json() that throws may leave v partly modified.

Exceptions

Complexity

Notes

The difference between the two ways matters for a from_json() that sets only the fields present in the JSON: since it runs on the existing v, the other fields of v keep their values, whereas assigning get<T>() would replace them with those of a default-constructed T.

Examples

??? example

The example below reads several fields of a service configuration directly into existing variables, then uses
the returned reference to fold the `#!cpp host`/`#!cpp port` pair into a single string in the same expression.

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

Output:

```json
--8<-- "examples/basic_json_view__get_to.output"
```

See also

Version history

  • Added in version 3.13.0.