Adds a value to an object or inserts it into an array at the target location. If a value already exists at the target location, that value is replaced.
#include <jsoncons_ext/jsonpointer/jsonpointer.hpp>
template<class Json, class T>
void add(Json& target, const Json::string_view_type& location,
T&& value, bool create_if_missing = false); (1)
template<class Json, class T>
void add(Json& target, const Json::string_view_type& location,
T&& value, std::error_code& ec); (2)
template<class Json, class T>
void add(Json& target, const Json::string_view_type& location,
T&& value, bool create_if_missing, std::error_code& ec); (3) (since 0.162.0)
Inserts a value into the target at the specified location, or if the location specifies an object member that already has the same key, assigns the new value to that member
-
If
location
specifies an array index, a new value is inserted into the array at the specified index. -
If
location
specifies an object member that does not already exist, a new member is added to the object. -
If
location
specifies an object member that does exist, that member's value is replaced.
target | JSON value |
location | JSON Pointer |
value | New or replacement value |
create_if_missing (since 0.162.0) |
Create key-object pairs when object key is missing |
ec |
out-parameter for reporting errors in the non-throwing overload |
None
(1) Throws a jsonpointer_error if add
fails.
(2)-(3) Sets the out-parameter ec
to the jsonpointer_error_category if add
fails.
#include <jsoncons/json.hpp>
#include <jsoncons_ext/jsonpointer/jsonpointer.hpp>
using jsoncons::json;
namespace jsonpointer = jsoncons::jsonpointer;
int main()
{
auto target = json::parse(R"(
{ "foo": "bar", "baz" : "abc"}
)");
std::error_code ec;
jsonpointer::add(target, "/baz", json("qux"), ec);
if (ec)
{
std::cout << ec.message() << std::endl;
}
else
{
std::cout << target << std::endl;
}
}
Output:
{"baz":"qux","foo":"bar"}
#include <iostream>
#include <jsoncons/json.hpp>
#include <jsoncons_ext/jsonpointer/jsonpointer.hpp>
using jsoncons::json;
namespace jsonpointer = jsoncons::jsonpointer;
int main()
{
std::vector<std::string> keys = {"foo","bar","baz"};
jsonpointer::json_pointer location;
for (const auto& key : keys)
{
location /= key;
}
json doc;
jsonpointer::add(doc, location, "str", true);
std::cout << pretty_print(doc) << "\n\n";
}
Output:
{
"foo": {
"bar": {
"baz": "str"
}
}
}