JSON for Modern C++  3.7.3

◆ items() [1/2]

iteration_proxy<const_iterator> nlohmann::basic_json::items ( ) const
inlinenoexcept

This function allows to access iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

For loop without items() function:

for (auto it = j_object.begin(); it != j_object.end(); ++it)
{
std::cout << "key: " << it.key() << ", value:" << it.value() << '\n';
}

Range-based for loop without items() function:

for (auto it : j_object)
{
// "it" is of type json::reference and has no key() member
std::cout << "value: " << it << '\n';
}

Range-based for loop with items() function:

for (auto& el : j_object.items())
{
std::cout << "key: " << el.key() << ", value:" << el.value() << '\n';
}

The items() function also allows to use structured bindings (C++17):

for (auto& [key, val] : j_object.items())
{
std::cout << "key: " << key << ", value:" << val << '\n';
}
Note
When iterating over an array, key() will return the index of the element as string (see example). For primitive types (e.g., numbers), key() returns an empty string.
Returns
iteration proxy object wrapping ref with an interface to use in range-based for loops
Example
The following code shows how the function is used.
1 #include <iostream>
2 #include <nlohmann/json.hpp>
3 
4 using json = nlohmann::json;
5 
6 int main()
7 {
8  // create JSON values
9  json j_object = {{"one", 1}, {"two", 2}};
10  json j_array = {1, 2, 4, 8, 16};
11 
12  // example for an object
13  for (auto& x : j_object.items())
14  {
15  std::cout << "key: " << x.key() << ", value: " << x.value() << '\n';
16  }
17 
18  // example for an array
19  for (auto& x : j_array.items())
20  {
21  std::cout << "key: " << x.key() << ", value: " << x.value() << '\n';
22  }
23 }

Output (play with this example online):
key: one, value: 1
key: two, value: 2
key: 0, value: 1
key: 1, value: 2
key: 2, value: 4
key: 3, value: 8
key: 4, value: 16
The example code above can be translated with
g++ -std=c++11 -Isingle_include doc/examples/items.cpp -o items 
Exception safety
Strong guarantee: if an exception is thrown, there are no changes in the JSON value.
Complexity
Constant.
Since
version 3.1.0, structured bindings support since 3.5.0.

Definition at line 19077 of file json.hpp.

nlohmann::json
basic_json<> json
default JSON class
Definition: json.hpp:2445