Files
json/docs/mkdocs/docs/api/basic_json/emplace.md
T
Niels Lohmann 52b72b5684 Improve documentation: byte layouts, release pages, See also, dark-mode images (#5906)
- 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>
2026-10-24 17:57:44 +02:00

2.4 KiB

nlohmann::basic_json::emplace

template<class... Args>
std::pair<iterator, bool> emplace(Args&& ... args);

Inserts a new element into a JSON object constructed in-place with the given args if there is no element with the key in the container. If the function is called on a JSON null value, an empty object is created before appending the value created from args.

Template parameters

Args
compatible types to create a basic_json object

Iterator invalidation

For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

Parameters

args (in)
arguments to forward to a constructor of basic_json

Return value

a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a #!cpp bool denoting whether the insertion took place.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes to any JSON value. As an exception, a #!json null value is converted to an empty object before the element is added and keeps that type if adding the element throws.

Exceptions

Throws type_error.311 when called on a type other than JSON object or #!json null; example: "cannot use emplace() with number"

Complexity

Logarithmic in the size of the container, O(log(size())).

Examples

??? example

The example shows how `emplace()` can be used to add elements to a JSON object. Note how the `#!json null` value was
silently converted to a JSON object. Further note how no value is added if there was already one value stored with
the same key.
        
```cpp
--8<-- "examples/emplace.cpp"
```

Output:

```json
--8<-- "examples/emplace.output"
```

See also

Version history

  • Added in version 2.0.8.
  • Fixed in version 3.13.0: for ordered_json, the value could previously only be passed as an rvalue; it can now also be passed as an lvalue or a #!cpp const lvalue, matching the behavior of json.