patch - JSON for Modern C++ (original) (raw)

nlohmann::basic_json::patch

basic_json patch(const basic_json& json_patch) const;

JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

Parameters

json_patch (in)

JSON patch document

Return value

patched document

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

Complexity

Linear in the size of the JSON value and the length of the JSON patch. As usually the patch affects only a fraction of the JSON value, the complexity can usually be neglected.

Notes

The application of a patch is atomic: Either all operations succeed and the patched document is returned or an exception is thrown. In any case, the original value is not changed: the patch is applied to a copy of the value.

Examples

Example

The following code shows how a JSON patch is applied to a value.

`#include #include #include <nlohmann/json.hpp>

using json = nlohmann::json; using namespace nlohmann::literals;

int main() { // the original document json doc = R"( { "baz": "qux", "foo": "bar" } )"_json;

// the patch
json patch = R"(
    [
      { "op": "replace", "path": "/baz", "value": "boo" },
      { "op": "add", "path": "/hello", "value": ["world"] },
      { "op": "remove", "path": "/foo"}
    ]
)"_json;

// apply the patch
json patched_doc = doc.patch(patch);

// output original and patched document
std::cout << std::setw(4) << doc << "\n\n"
          << std::setw(4) << patched_doc << std::endl;

} `

Output:

`{ "baz": "qux", "foo": "bar" }

{ "baz": "boo", "hello": [ "world" ] } `

See also

Version history