* docs: new design for the documentation site Apply the brand to the Material for MkDocs site: Inter and JetBrains Mono served by the site (upright and real italic), brand colours, blue header band with the syntax pattern, wordmark in the header, new home page (hero, cards, animated feature tour), 404 page, polish for tabs, search, footer, focus rings, tables and code blocks, and theme features (code copy, previous/next footer, TOC follow, search suggestions). Draw the number railroad diagram, the parser callback events and the iterator illustrations as inline SVGs that follow the light and dark scheme. The generator scripts are in docs/mkdocs/scripts/figures; the feature slideshow (json-light.svg, json-dark.svg, replacing json.gif on the home page) is built by docs/mkdocs/scripts/slideshow. Decision nodes in five flowcharts become hexagons, which need far less room. Signed-off-by: Niels Lohmann <mail@nlohmann.me> * docs: add figures, table captions and a macro chooser - Figures with numbered captions: SAX stepper, json_view layout and edit stepper, exception map, JSON pointer and patch walkers, QA pipeline, scaling and binary size charts, roadmap lanes, release timeline, integration decision tree and namespace builder - Table captions (nj-table-caption) on 9 pages - Compile times: modules and PCH charts, filesystem section, re-measured Figure 1, links between features/modules.md and compile_times.md - Interactive macro chooser for features/arbitrary_types.md - Link check: exclude URLs that answer the plugin with 400/401/419 or are dead (customers.md) Signed-off-by: Niels Lohmann <mail@nlohmann.me> * docs: macro chooser generates adl_serializer for non-default-constructible types Signed-off-by: Niels Lohmann <mail@nlohmann.me> * docs: cross-link concept pages and API pages in See also sections Add See also links in both directions between the concept pages (features, home, integration) and the API pages, write API links in code font, give every entry a comment after a dash, and show the callback event figure on the parser callbacks page. Signed-off-by: Niels Lohmann <mail@nlohmann.me> * docs: address review comments on the new design - Home: add a "Latest release" button - Sponsors: update the list and group it by tier - Features: list all feature pages on the index page - Releases: add highlights per release, link the 4.0 roadmap, add the first commit to the timeline - Exceptions: prefix all example messages with the exception name - API: no code font for format names in the See also links of the to_/from_ pages - Merge Patch: show the document before, the patch, and the result - Replace "--" with typographic dashes, mark external links with an icon, center Mermaid diagrams Signed-off-by: Niels Lohmann <mail@nlohmann.me> --------- 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 contentsinsert- 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.