|
§ diff()
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>
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] | source | JSON value to copare from |
[in] | target | JSON value to copare against |
[in] | path | helper 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.
29 json patched_source = source.patch(patch); 32 std::cout << std::setw(4) << patch << "\n\n" 33 << std::setw(4) << patched_source << std::endl; basic_json<> json default JSON class
static basic_json diff(const basic_json &source, const basic_json &target, const std::string &path="") creates a diff as a JSON patch
basic_json patch(const basic_json &json_patch) const applies a JSON patch
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 withg++ -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 10007 of file json.hpp.
|