mirror of
https://github.com/nlohmann/json.git
synced 2026-10-26 07:48:55 +00:00
- 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>
5.0 KiB
5.0 KiB
nlohmann::basic_json::contains
// (1)
bool contains(const typename object_t::key_type& key) const;
// (2)
template<typename KeyType>
bool contains(KeyType&& key) const;
// (3)
bool contains(const json_pointer& ptr) const;
// (4)
template<typename T>
bool contains(T) const = delete;
- Check whether an element exists in a JSON object with a key equivalent to
key. If the element is not found or the JSON value is not an object,#!cpp falseis returned. - See 1. This overload is only available if
KeyTypeis comparable with#!cpp typename object_t::key_typeand#!cpp typename object_comparator_t::is_transparentdenotes a type. - Check whether the given JSON pointer
ptrcan be resolved in the current JSON value. - Deleted: this overload is only available if
Tis an integral type and is declared as deleted, so that a call with an integerkey(for example,#!cpp j.contains(0)) fails to compile. Otherwise, the integer literal0would convert to a null#!cpp const char*and, from there, to the key type, causing undefined behavior at runtime.
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
key(in)- key value to check its existence.
ptr(in)- JSON pointer to check its existence.
Return value
#!cpp trueif an element with specifiedkeyexists. If no such element with such a key is found or the JSON value is not an object,#!cpp falseis returned.- See 1.
#!cpp trueif the JSON pointer can be resolved to a stored value,#!cpp falseotherwise.- Deleted; a call with an integral argument does not compile.
Exception safety
Strong exception safety: if an exception occurs, the original value stays intact.
Exceptions
- The function does not throw exceptions.
- The function does not throw exceptions.
- The function does not throw exceptions.
- Deleted; a call with an integral argument does not compile.
Complexity
Logarithmic in the size of the JSON object.
Notes
- This method always returns
#!cpp falsewhen executed on a JSON type that is not an object. - This method can be executed on any JSON value type.
- Calling this function with an integer argument (for example,
#!cpp contains(0)) does not compile: such an argument would otherwise implicitly convert to a null#!cpp const char*and, from there, cause undefined behavior when constructing a#!cpp std::stringfor the object key. To check for an array element instead, useat,operator[], or compare againstsize.
!!! info "Postconditions"
If `#!cpp j.contains(x)` returns `#!c true` for a key or JSON pointer `x`, then it is safe to call `j[x]`.
!!! warning "Deprecation"
Overload (3) 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) check with key"
The example shows how `contains()` is used.
```cpp
--8<-- "examples/contains__object_t_key_type.cpp"
```
Output:
```json
--8<-- "examples/contains__object_t_key_type.output"
```
??? example "Example: (2) check with key using string_view"
The example shows how `contains()` is used.
```cpp
--8<-- "examples/contains__keytype.c++17.cpp"
```
Output:
```json
--8<-- "examples/contains__keytype.c++17.output"
```
??? example "Example: (3) check with JSON pointer"
The example shows how `contains()` is used.
```cpp
--8<-- "examples/contains__json_pointer.cpp"
```
Output:
```json
--8<-- "examples/contains__json_pointer.output"
```
See also
- find find a value in an object
- count returns the number of occurrences of a key
- basic_json_view::contains - the same check on a zero-copy view
Version history
- Added in version 3.11.0.
- Added in version 3.6.0. Extended template
KeyTypeto support comparable types in version 3.11.0. Support for keys convertible tostd::string_viewadded in version 3.13.0, consistently across the lookup functions. - Added in version 3.7.0.
- Deleted overloads for integral key types added in version 3.13.0 to reject such calls at compile time instead of causing undefined behavior at runtime.