JSON for Modern C++  2.0.3
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = std::int64_t, class NumberUnsignedType = std::uint64_t, class NumberFloatType = double, template< typename U > class AllocatorType = std::allocator>
static basic_json nlohmann::basic_json::diff ( const basic_json source,
const basic_json target,
const std::string &  path = "" 
)
inlinestatic

Creates a JSON Patch so that value source can be changed into the value target by calling patch function.

Invariant
For two JSON values source and target, the following code yields always true:
source.patch(diff(source, target)) == target;
Note
Currently, only remove, add, and replace operations are generated.
Parameters
[in]sourceJSON value to copare from
[in]targetJSON value to copare against
[in]pathhelper value to create JSON pointers
Returns
a JSON patch to convert the source to target
Complexity
Linear in the lengths of source and target.
Example
The following code shows how a JSON patch is created as a diff for two JSON values.
1 #include <json.hpp>
2 
3 using json = nlohmann::json;
4 
5 int main()
6 {
7  // the source document
8  json source = R"(
9  {
10  "baz": "qux",
11  "foo": "bar"
12  }
13  )"_json;
14 
15  // the target document
16  json target = R"(
17  {
18  "baz": "boo",
19  "hello": [
20  "world"
21  ]
22  }
23  )"_json;
24 
25  // create the patch
26  json patch = json::diff(source, target);
27 
28  // roundtrip
29  json patched_source = source.patch(patch);
30 
31  // output patch and roundtrip result
32  std::cout << std::setw(4) << patch << "\n\n"
33  << std::setw(4) << patched_source << std::endl;
34 }
basic_json<> json
default JSON class
Definition: json.hpp:10122
static basic_json diff(const basic_json &source, const basic_json &target, const std::string &path="")
creates a diff as a JSON patch
Definition: json.hpp:9974
basic_json patch(const basic_json &json_patch) const
applies a JSON patch
Definition: json.hpp:9681
Output (play with this example online):
[
    {
        "op": "replace",
        "path": "/baz",
        "value": "boo"
    },
    {
        "op": "remove",
        "path": "/foo"
    },
    {
        "op": "add",
        "path": "/hello",
        "value": [
            "world"
        ]
    }
]

{
    "baz": "boo",
    "hello": [
        "world"
    ]
}
The example code above can be translated with
g++ -std=c++11 -Isrc doc/examples/diff.cpp -o diff 
See also
patch – apply a JSON patch
RFC 6902 (JSON Patch)
Since
version 2.0.0

Definition at line 9974 of file json.hpp.