nlohmann::basic_json::erase¶
// (1)
iteratorerase(iteratorpos);
const_iteratorerase(const_iteratorpos);
// (2)
iteratorerase(iteratorfirst,iteratorlast);
const_iteratorerase(const_iteratorfirst,const_iteratorlast);
// (3)
size_typeerase(consttypenameobject_t::key_type&key);
// (4)
template<typenameKeyType>
size_typeerase(KeyType&&key);
// (5)
voiderase(constsize_typeidx);
-
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
null, the resulting JSON value will benull. -
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
null, the resulting JSON value will benull. -
Removes an element from a JSON object by key.
-
See 3. This overload is only available if
KeyTypeis comparable withtypenameobject_t::key_typeandtypenameobject_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 between
firstandlast, plus linear in the distance betweenlastand 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
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: (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>
usingjson=nlohmann::json;
intmain()
{
// create JSON values
jsonj_boolean=true;
jsonj_number_integer=17;
jsonj_number_float=23.42;
jsonj_object={{"one",1},{"two",2}};
jsonj_array={1,2,4,8,16};
jsonj_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>
usingjson=nlohmann::json;
intmain()
{
// create JSON values
jsonj_boolean=true;
jsonj_number_integer=17;
jsonj_number_float=23.42;
jsonj_object={{"one",1},{"two",2}};
jsonj_array={1,2,4,8,16};
jsonj_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>
usingjson=nlohmann::json;
intmain()
{
// create a JSON object
jsonj_object={{"one",1},{"two",2}};
// call erase()
autocount_one=j_object.erase("one");
autocount_three=j_object.erase("three");
// print values
std::cout<<j_object<<'\n';
std::cout<<count_one<<" "<<count_three<<'\n';
}
Output:
{"two":2}
10
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>
usingnamespacestd::string_view_literals;
usingjson=nlohmann::json;
intmain()
{
// create a JSON object
jsonj_object={{"one",1},{"two",2}};
// call erase()
autocount_one=j_object.erase("one"sv);
autocount_three=j_object.erase("three"sv);
// print values
std::cout<<j_object<<'\n';
std::cout<<count_one<<" "<<count_three<<'\n';
}
Output:
{"two":2}
10
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>
usingjson=nlohmann::json;
intmain()
{
// create a JSON array
jsonj_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]
See also¶
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.