11 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
#include <iostream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main()
{
// create JSON values
json j_boolean = true;
json j_number_integer = 17;
json j_number_float = 23.42;
json j_object = {{"one", 1}, {"two", 2}};
json j_array = {1, 2, 4, 8, 16};
json j_string = "Hello, world";
// call erase()
j_boolean.erase(j_boolean.begin());
j_number_integer.erase(j_number_integer.begin());
j_number_float.erase(j_number_float.begin());
j_object.erase(j_object.find("two"));
j_array.erase(j_array.begin() + 2);
j_string.erase(j_string.begin());
// print values
std::cout << j_boolean << '\n';
std::cout << j_number_integer << '\n';
std::cout << j_number_float << '\n';
std::cout << j_object << '\n';
std::cout << j_array << '\n';
std::cout << j_string << '\n';
}
```
Output:
```json
null
null
null
{"one":1}
[1,2,8,16]
null
```
??? 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
#include <iostream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main()
{
// create JSON values
json j_boolean = true;
json j_number_integer = 17;
json j_number_float = 23.42;
json j_object = {{"one", 1}, {"two", 2}};
json j_array = {1, 2, 4, 8, 16};
json j_string = "Hello, world";
// call erase()
j_boolean.erase(j_boolean.begin(), j_boolean.end());
j_number_integer.erase(j_number_integer.begin(), j_number_integer.end());
j_number_float.erase(j_number_float.begin(), j_number_float.end());
j_object.erase(j_object.find("two"), j_object.end());
j_array.erase(j_array.begin() + 1, j_array.begin() + 3);
j_string.erase(j_string.begin(), j_string.end());
// print values
std::cout << j_boolean << '\n';
std::cout << j_number_integer << '\n';
std::cout << j_number_float << '\n';
std::cout << j_object << '\n';
std::cout << j_array << '\n';
std::cout << j_string << '\n';
}
```
Output:
```json
null
null
null
{"one":1}
[1,8,16]
null
```
??? 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
#include <iostream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main()
{
// create a JSON object
json j_object = {{"one", 1}, {"two", 2}};
// call erase()
auto count_one = j_object.erase("one");
auto count_three = j_object.erase("three");
// print values
std::cout << j_object << '\n';
std::cout << count_one << " " << count_three << '\n';
}
```
Output:
```json
{"two":2}
1 0
```
??? 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
#include <iostream>
#include <string_view>
#include <nlohmann/json.hpp>
using namespace std::string_view_literals;
using json = nlohmann::json;
int main()
{
// create a JSON object
json j_object = {{"one", 1}, {"two", 2}};
// call erase()
auto count_one = j_object.erase("one"sv);
auto count_three = j_object.erase("three"sv);
// print values
std::cout << j_object << '\n';
std::cout << count_one << " " << count_three << '\n';
}
```
Output:
```json
{"two":2}
1 0
```
??? example "Example: (5) remove element from a JSON array given an index"
The example shows the effect of `erase()` using an array index.
```cpp
#include <iostream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main()
{
// create a JSON array
json j_array = {0, 1, 2, 3, 4, 5};
// call erase()
j_array.erase(2);
// print values
std::cout << j_array << '\n';
}
```
Output:
```json
[0,1,3,4,5]
```
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. Fixed in version 3.13.0 to consistently accept
std::string_view-convertible keys, as already supported byoperator[],at,value, and other lookup functions. - Added in version 1.0.0.