nlohmann::basic_json::contains¶
// (1)
boolcontains(consttypenameobject_t::key_type&key)const;
// (2)
template<typenameKeyType>
boolcontains(KeyType&&key)const;
// (3)
boolcontains(constjson_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,falseis returned. - See 1. This overload is only available if
KeyTypeis comparable withtypenameobject_t::key_typeandtypenameobject_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¶
trueif an element with specifiedkeyexists. If no such element with such a key is found or the JSON value is not an object,falseis returned.- See 1.
trueif the JSON pointer can be resolved to a stored value,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
falsewhen executed on a JSON type that is not an object. - This method can be executed on any JSON value type.
Postconditions
If j.contains(x) returns true for a key or JSON pointer x, then it is safe to call j[x].
Examples¶
Example: (1) check with key
The example shows how contains() is used.
#include<iostream>
#include<nlohmann/json.hpp>
usingjson=nlohmann::json;
usingnamespacenlohmann::literals;
intmain()
{
// create some JSON values
jsonj_object=R"( {"key": "value"} )"_json;
jsonj_array=R"( [1, 2, 3] )"_json;
// call contains
std::cout<<std::boolalpha<<
"j_object contains 'key': "<<j_object.contains("key")<<'\n'<<
"j_object contains 'another': "<<j_object.contains("another")<<'\n'<<
"j_array contains 'key': "<<j_array.contains("key")<<std::endl;
}
Output:
j_objectcontains'key':true
j_objectcontains'another':false
j_arraycontains'key':false
Example: (2) check with key using string_view
The example shows how contains() is used.
#include<iostream>
#include<string_view>
#include<nlohmann/json.hpp>
usingnamespacestd::string_view_literals;
usingjson=nlohmann::json;
usingnamespacenlohmann::literals;
intmain()
{
// create some JSON values
jsonj_object=R"( {"key": "value"} )"_json;
jsonj_array=R"( [1, 2, 3] )"_json;
// call contains
std::cout<<std::boolalpha<<
"j_object contains 'key': "<<j_object.contains("key"sv)<<'\n'<<
"j_object contains 'another': "<<j_object.contains("another"sv)<<'\n'<<
"j_array contains 'key': "<<j_array.contains("key"sv)<<std::endl;
}
Output:
j_objectcontains'key':true
j_objectcontains'another':false
j_arraycontains'key':false
Example: (3) check with JSON pointer
The example shows how contains() is used.
#include<iostream>
#include<nlohmann/json.hpp>
usingjson=nlohmann::json;
usingnamespacenlohmann::literals;
intmain()
{
// create a JSON value
jsonj=
{
{"number",1},{"string","foo"},{"array",{1,2}}
};
std::cout<<std::boolalpha
<<j.contains("/number"_json_pointer)<<'\n'
<<j.contains("/string"_json_pointer)<<'\n'
<<j.contains("/array"_json_pointer)<<'\n'
<<j.contains("/array/1"_json_pointer)<<'\n'
<<j.contains("/array/-"_json_pointer)<<'\n'
<<j.contains("/array/4"_json_pointer)<<'\n'
<<j.contains("/baz"_json_pointer)<<std::endl;
try
{
// try to use an array index with leading '0'
j.contains("/array/01"_json_pointer);
}
catch(constjson::parse_error&e)
{
std::cout<<e.what()<<'\n';
}
try
{
// try to use an array index that is not a number
j.contains("/array/one"_json_pointer);
}
catch(constjson::parse_error&e)
{
std::cout<<e.what()<<'\n';
}
}
Output:
true
true
true
true
false
false
false
See also¶
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.