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 iteratorpos
must 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
null
, the resulting JSON value will benull
. -
Remove an element range specified by
[first; last)
from a JSON value. The iteratorfirst
does not need to be dereferenceable iffirst == last
: erasing an empty range is a no-op.If called on a primitive type other than
null
, the resulting JSON value will benull
. -
Removes an element from a JSON object by key.
-
See 3. This overload is only available if
KeyType
is comparable withtypename object_t::key_type
andtypename object_comparator_t::is_transparent
denotes a type. -
Removes an element from a JSON array by index.
Template parameters¶
KeyType
- A type for an object key other than
json_pointer
that is comparable withstring_t
usingobject_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
pos
refers to the last element, theend()
iterator is returned. - Iterator following the last removed element. If the iterator
last
refers to the last element, theend()
iterator is returned. - Number of elements removed. If
ObjectType
is the defaultstd::map
type, the return value will always be0
(key
was not found) or1
(key
was 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.307
if called on anull
value; example:"cannot use erase() with null"
- Throws
invalid_iterator.202
if called on an iterator which does not belong to the current JSON value; example:"iterator does not fit current value"
- Throws
invalid_iterator.205
if 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.307
if called on anull
value; example:"cannot use erase() with null"
- Throws
invalid_iterator.203
if called on iterators which does not belong to the current JSON value; example:"iterators do not fit current value"
- Throws
invalid_iterator.204
if 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.307
when 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.307
when called on a type other than JSON object; example:"cannot use erase() with null"
- Throws
out_of_range.401
whenidx >= 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
pos
and 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 between
first
andlast
, plus linear in the distance betweenlast
and end of the container - strings and binary: linear in the length of the member
- other types: constant
- objects:
log(size()) + count(key)
log(size()) + count(key)
- Linear in distance between
idx
and 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: (1) remove element given an iterator
The example shows the effect of erase()
for different JSON types using an iterator.
#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:
null
null
null
{"one":1}
[1,2,8,16]
null
Example: (2) remove elements given an iterator range
The example shows the effect of erase()
for different JSON types using an iterator range.
#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:
null
null
null
{"one":1}
[1,8,16]
null
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.
#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:
{"two":2}
1 0
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.
#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:
{"two":2}
1 0
Example: (5) remove element from a JSON array given an index
The example shows the effect of erase()
using an array index.
#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:
[0,1,3,4,5]
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.
- Added in version 1.0.0.