mirror of
https://github.com/nlohmann/json.git
synced 2026-10-02 15:05:16 +00:00
Conflicts in See also lists (docs/mkdocs/docs/api/basic_json/begin.md,docs/mkdocs/docs/api/basic_json/cbegin.md,docs/mkdocs/docs/api/basic_json/cend.md,docs/mkdocs/docs/api/basic_json/end.md,docs/mkdocs/docs/api/basic_json/type_name.md), where develop (#5638) and this branch both edited: kept develop's entries and added this branch's basic_json_view links. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
4.4 KiB
4.4 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;
- 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.
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.
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.
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. - 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.