- 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>
7.6 KiB
nlohmann::basic_json::erase
// (1)
iterator erase(iterator pos);
const_iterator erase(const_iterator pos);
// (2)
iterator erase(iterator first, iterator last);
const_iterator erase(const_iterator first, const_iterator last);
// (3)
size_type erase(const typename object_t::key_type& key);
// (4)
template<typename KeyType>
size_type erase(KeyType&& key);
// (5)
void erase(const size_type idx);
-
Removes an element from a JSON value specified by iterator
pos. The iteratorposmust be valid and dereferenceable. Thus, theend()iterator (which is valid, but is not dereferenceable) cannot be used as a value forpos.If called on a primitive type other than
#!json null, the resulting JSON value will be#!json null. -
Remove an element range specified by
[first; last)from a JSON value. The iteratorfirstdoes not need to be dereferenceable iffirst == last: erasing an empty range is a no-op.If called on a primitive type other than
#!json null, the resulting JSON value will be#!json null. -
Removes an element from a JSON object by key.
-
See 3. This overload is only available if
KeyTypeis comparable with#!cpp typename object_t::key_typeand#!cpp typename object_comparator_t::is_transparentdenotes a type. -
Removes an element from a JSON array by index.
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
pos(in)- iterator to the element to remove
first(in)- iterator to the beginning of the range to remove
last(in)- iterator past the end of the range to remove
key(in)- object key of the elements to remove
idx(in)- array index of the element to remove
Return value
- Iterator following the last removed element. If the iterator
posrefers to the last element, theend()iterator is returned. - Iterator following the last removed element. If the iterator
lastrefers to the last element, theend()iterator is returned. - Number of elements removed. If
ObjectTypeis the defaultstd::maptype, the return value will always be0(keywas not found) or1(keywas found). - See 3.
- (none)
Exception safety
Strong exception safety: if an exception occurs, the original value stays intact.
Exceptions
- The function can throw the following exceptions:
- Throws
type_error.307if called on anullvalue; example:"cannot use erase() with null" - Throws
invalid_iterator.202if called on an iterator which does not belong to the current JSON value; example:"iterator does not fit current value" - Throws
invalid_iterator.205if called on a primitive type with invalid iterator (i.e., any iterator which is notbegin()); example:"iterator out of range"
- Throws
- The function can throw the following exceptions:
- Throws
type_error.307if called on anullvalue; example:"cannot use erase() with null" - Throws
invalid_iterator.203if called on iterators which does not belong to the current JSON value; example:"iterators do not fit current value" - Throws
invalid_iterator.204if called on a primitive type with invalid iterators (i.e., iffirst != begin()andlast != end()); example:"iterators out of range"
- Throws
- The function can throw the following exceptions:
- Throws
type_error.307when called on a type other than JSON object; example:"cannot use erase() with null"
- Throws
- See 3.
- The function can throw the following exceptions:
- Throws
type_error.307when called on a type other than JSON array; example:"cannot use erase() with null" - Throws
out_of_range.401whenidx >= size(); example:"array index 17 is out of range"
- Throws
Complexity
- The complexity depends on the type:
- objects: amortized constant
- arrays: linear in distance between
posand the end of the container - strings and binary: linear in the length of the member - other types: constant - The complexity depends on the type:
- objects:
log(size()) + std::distance(first, last)- arrays: linear in the distance betweenfirstandlast, plus linear in the distance betweenlastand end of the container - strings and binary: linear in the length of the member - other types: constant log(size()) + count(key)log(size()) + count(key)- Linear in distance between
idxand the end of the container.
Notes
- Invalidates iterators and references at or after the point of the
erase, including theend()iterator. - (none)
- References and iterators to the erased elements are invalidated. Other references and iterators are not affected.
- See 3.
- (none)
Examples
??? example "Example: (1) remove element given an iterator"
The example shows the effect of `erase()` for different JSON types using an iterator.
```cpp
--8<-- "examples/erase__IteratorType.cpp"
```
Output:
```json
--8<-- "examples/erase__IteratorType.output"
```
??? example "Example: (2) remove elements given an iterator range"
The example shows the effect of `erase()` for different JSON types using an iterator range.
```cpp
--8<-- "examples/erase__IteratorType_IteratorType.cpp"
```
Output:
```json
--8<-- "examples/erase__IteratorType_IteratorType.output"
```
??? example "Example: (3) remove element from a JSON object given a key"
The example shows the effect of `erase()` for different JSON types using an object key.
```cpp
--8<-- "examples/erase__object_t_key_type.cpp"
```
Output:
```json
--8<-- "examples/erase__object_t_key_type.output"
```
??? example "Example: (4) remove element from a JSON object given a key using string_view"
The example shows the effect of `erase()` for different JSON types using an object key.
```cpp
--8<-- "examples/erase__keytype.c++17.cpp"
```
Output:
```json
--8<-- "examples/erase__keytype.c++17.output"
```
??? example "Example: (5) remove element from a JSON array given an index"
The example shows the effect of `erase()` using an array index.
```cpp
--8<-- "examples/erase__size_type.cpp"
```
Output:
```json
--8<-- "examples/erase__size_type.output"
```
See also
- clear clears the contents
- insert add values to an array/object
- Modifying values - the article on modifying values
Version history
- Added in version 1.0.0. Added support for binary types in version 3.8.0.
- Added in version 1.0.0. Added support for binary types in version 3.8.0.
- Added in version 1.0.0.
- Added in version 3.11.0. Support for keys convertible to
std::string_viewadded in version 3.13.0, consistently across the lookup functions. - Added in version 1.0.0.