JSON for Modern C++ 3.10.4

◆ operator+=() [4/4]

template<template< typename U, typename V, typename... Args > class ObjectType = std::map, template< typename U, typename... Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = std::int64_t, class NumberUnsignedType = std::uint64_t, class NumberFloatType = double, template< typename U > class AllocatorType = std::allocator, template< typename T, typename SFINAE=void > class JSONSerializer = adl_serializer, class BinaryType = std::vector<std::uint8_t>>
reference nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType >::operator+= ( initializer_list_t  init)

add an object to an object This function allows to use push_back with an initializer list. In case

  1. the current value is an object,
  2. the initializer list init contains only two elements, and
  3. the first element of init is a string,

init is converted into an object element and added using push_back(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using push_back(basic_json&&).

[in]initan initializer list
Linear in the size of the initializer list init.
This function is required to resolve an ambiguous overload error, because pairs like {"key", "value"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see https://github.com/nlohmann/json/issues/235 for more information.
The example shows how initializer lists are treated as objects when possible.
1#include <iostream>
2#include <nlohmann/json.hpp>
4using json = nlohmann::json;
6int main()
8 // create JSON values
9 json object = {{"one", 1}, {"two", 2}};
10 json null;
12 // print values
13 std::cout << object << '\n';
14 std::cout << null << '\n';
16 // add values:
17 object.push_back({"three", 3}); // object is extended
18 object += {"four", 4}; // object is extended
19 null.push_back({"five", 5}); // null is converted to array
21 // print values
22 std::cout << object << '\n';
23 std::cout << null << '\n';
25 // would throw:
26 //object.push_back({1, 2, 3});
basic_json<> json
default JSON class
Definition: json.hpp:3472

Output (play with this example online):
The example code above can be translated with
g++ -std=c++11 -Isingle_include doc/examples/push_back__initializer_list.cpp -o push_back__initializer_list 

Definition at line 23125 of file json.hpp.