- Make the iterator range illustrations legible in dark mode (prefers-color-scheme rules inside the SVGs). - Add a "Byte layout" section with a color-coded byte table to each binary format page (BJData, BON8, BSON, CBOR, MessagePack, UBJSON), and highlight the smallest size per file in the comparison table. - Add "See also" sections to the overview pages that lacked one. - Split the release notes into one page per release, grouped by minor version on the overview page, with an "API changes" section per release generated from the API pages' version histories (hooks/api_changes.py). - Fact-check the release notes and version histories against the release tags and correct wrong or misleading entries (e.g., json_serializer 2.1.0, merge_patch 3.1.0, items, count, operator[], to_bjdata, std::string_view key support). Signed-off-by: Niels Lohmann <mail@nlohmann.me>
8.8 KiB
nlohmann::basic_json::at
// (1)
reference at(size_type idx);
const_reference at(size_type idx) const;
// (2)
reference at(const typename object_t::key_type& key);
const_reference at(const typename object_t::key_type& key) const;
// (3)
template<typename KeyType>
reference at(KeyType&& key);
template<typename KeyType>
const_reference at(KeyType&& key) const;
// (4)
reference at(const json_pointer& ptr);
const_reference at(const json_pointer& ptr) const;
- Returns a reference to the array element at specified location
idx, with bounds checking. - Returns a reference to the object element with specified key
key, with bounds checking. - See 2. This overload is only available if
KeyTypeis comparable with#!cpp typename object_t::key_typeand#!cpp typename object_comparator_t::is_transparentdenotes a type. - Returns a reference to the element at specified JSON pointer
ptr, with bounds checking.
Template parameters
KeyType- A type for an object key other than
json_pointerthat is comparable withstring_tusingobject_comparator_t. This can also be a string view (C++17).
Parameters
idx(in)- index of the element to access
key(in)- object key of the elements to access
ptr(in)- JSON pointer to the desired element
Return value
- reference to the element at index
idx - reference to the element at key
key - reference to the element at key
key - reference to the element pointed to by
ptr
Exception safety
Strong exception safety: if an exception occurs, the original value stays intact.
Exceptions
- The function can throw the following exceptions:
- Throws
type_error.304if the JSON value is not an array; in this case, callingatwith an index makes no sense. See the example below. - Throws
out_of_range.401if the indexidxis out of range of the array; that is,idx >= size(). See the example below.
- Throws
- The function can throw the following exceptions:
- Throws
type_error.304if the JSON value is not an object; in this case, callingatwith a key makes no sense. See the example below. - Throws
out_of_range.403if the keykeyis not stored in the object; that is,find(key) == end(). See the example below.
- Throws
- See 2.
- The function can throw the following exceptions:
- Throws
parse_error.106if an array index in the passed JSON pointerptrbegins with '0'. See the example below. - Throws
parse_error.109if an array index in the passed JSON pointerptris not a number. See the example below. - Throws
out_of_range.401if an array index in the passed JSON pointerptris out of range. See the example below. - Throws
out_of_range.402if the array index '-' is used in the passed JSON pointerptr. Asatprovides checked access (and no elements are implicitly inserted), the index '-' is always invalid. See the example below. - Throws
out_of_range.403if the JSON pointer describes a key of an object which cannot be found. See the example below. - Throws
out_of_range.404if the JSON pointerptrcan not be resolved. See the example below. - Throws
out_of_range.410if an array index in the passed JSON pointerptrexceeds the range ofsize_type(e.g., on 32-bit platforms).
- Throws
Complexity
- Constant.
- Logarithmic in the size of the container.
- Logarithmic in the size of the container.
- Logarithmic in the size of the container.
Notes
!!! warning "Deprecation"
Overload (4) also accepts a [`json_pointer`](../json_pointer/index.md) whose template argument is a `basic_json`
specialization (e.g., `nlohmann::json_pointer<nlohmann::json>`) instead of a string type. This is deprecated since
version 3.11.0 and will be removed in a future major version; use `basic_json::json_pointer` (for `json`,
`nlohmann::json_pointer<std::string>`) instead.
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
function.
See the [migration guide](../../integration/migration_guide.md#json-pointers) for how to update existing code.
Examples
??? example "Example: (1) access specified array element with bounds checking"
The example below shows how array elements can be read and written using `at()`. It also demonstrates the different
exceptions that can be thrown.
```cpp
--8<-- "examples/at__size_type.cpp"
```
Output:
```json
--8<-- "examples/at__size_type.output"
```
??? example "Example: (1) access specified array element with bounds checking"
The example below shows how array elements can be read using `at()`. It also demonstrates the different exceptions
that can be thrown.
```cpp
--8<-- "examples/at__size_type_const.cpp"
```
Output:
```json
--8<-- "examples/at__size_type_const.output"
```
??? example "Example: (2) access specified object element with bounds checking"
The example below shows how object elements can be read and written using `at()`. It also demonstrates the different
exceptions that can be thrown.
```cpp
--8<-- "examples/at__object_t_key_type.cpp"
```
Output:
```json
--8<-- "examples/at__object_t_key_type.output"
```
??? example "Example: (2) access specified object element with bounds checking"
The example below shows how object elements can be read using `at()`. It also demonstrates the different exceptions
that can be thrown.
```cpp
--8<-- "examples/at__object_t_key_type_const.cpp"
```
Output:
```json
--8<-- "examples/at__object_t_key_type_const.output"
```
??? example "Example: (3) access specified object element using string_view with bounds checking"
The example below shows how object elements can be read and written using `at()`. It also demonstrates the different
exceptions that can be thrown.
```cpp
--8<-- "examples/at__keytype.c++17.cpp"
```
Output:
```json
--8<-- "examples/at__keytype.c++17.output"
```
??? example "Example: (3) access specified object element using string_view with bounds checking"
The example below shows how object elements can be read using `at()`. It also demonstrates the different exceptions
that can be thrown.
```cpp
--8<-- "examples/at__keytype_const.c++17.cpp"
```
Output:
```json
--8<-- "examples/at__keytype_const.c++17.output"
```
??? example "Example: (4) access specified element via JSON Pointer"
The example below shows how object elements can be read and written using `at()`. It also demonstrates the different
exceptions that can be thrown.
```cpp
--8<-- "examples/at__json_pointer.cpp"
```
Output:
```json
--8<-- "examples/at__json_pointer.output"
```
??? example "Example: (4) access specified element via JSON Pointer"
The example below shows how object elements can be read using `at()`. It also demonstrates the different exceptions
that can be thrown.
```cpp
--8<-- "examples/at__json_pointer_const.cpp"
```
Output:
```json
--8<-- "examples/at__json_pointer_const.output"
```
See also
- documentation on checked access
operator[]for unchecked access by referencevaluefor access with default value- basic_json_view::at - the same access on a zero-copy view
Version history
- Added in version 1.0.0.
- Added in version 1.0.0.
- Added in version 3.11.0. Support for keys convertible to
std::string_viewadded in version 3.13.0, consistently across the lookup functions. - Added in version 2.0.0. Throws
parse_error.109instead ofout_of_range.404for a one-character array index that is not a digit (e.g.,/x) in version 3.13.0, as it already did for longer ones.