...
Mechanism for Delta generation
Additional Details
Format/Conventions to be used for Delta Report
There are several ways of representing the differences between JSON but here we discuss the JSON Patch format of representing these differences because the proposed Delta report closely represents JSON patch with a few differences. This approach focuses in producing another JSON document that represents the differences between the two JSON's that have been compared.
JSON Patch
JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JavaScript Object Notation(JSON) document; it is suitable for use with the HTTP PATCH method. The "application/json-patch+json" media type is used to identify such patch documents.
But in it can also be used to get the differences between two JSON as the JSON patch document represents an array of objects. where each object represents a single operation(op), path and value.
Here the notation of operation is used as the same JSON Patch document can be used to perform HTTP Patch operations. But The operations field can be used as a reference to decide how the "action" field should function in the implementation of Delta report.
The operation "op
" field in a JSON patch document can have following values:
Operation | Description | Delta report equivalent |
---|---|---|
add | Adds the value at the target location; if the value exists in the given location, it’s replaced | if the value is not present in the source json, but was found in the comparand json, then it should be considered an "add" action |
remove | Removes the value at the target location | if a value was present at the source json, but was not found in the comparand json, then it should be considered as "delete" action |
replace | Replaces the value at the target location | if a value is present in the source json, but an updated value is present in the comparand json, then it will be considered as "update" action |
move | Removes the value at a specified location and adds it to the target location | N/A |
copy | Copies the value at a specified location to the target location | N/A |
test | Tests that a value at the target location is equal to a specified value | N/A |
Code Block | ||||
---|---|---|---|---|
| ||||
[
{ "op": "test", "path": "/a/b/c", "value": "foo" },
{ "op": "remove", "path": "/a/b/c" },
{ "op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ] },
{ "op": "replace", "path": "/a/b/c", "value": 42 },
{ "op": "move", "from": "/a/b/c", "path": "/a/b/d" },
{ "op": "copy", "from": "/a/b/d", "path": "/a/b/e" }
] |