Skip to content

Latest commit

 

History

History
135 lines (105 loc) · 3.15 KB

add.md

File metadata and controls

135 lines (105 loc) · 3.15 KB

jsoncons::jsonpointer::add

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.

Parameters

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

Return value

None

Exceptions

(1) Throws a jsonpointer_error if add fails.

(2)-(3) Sets the out-parameter ec to the jsonpointer_error_category if add fails.

Examples

Insert or assign an object member at a location that already exists

#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"}

Add a value to a location after creating objects when missing object keys

#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"
        }
    }
}