[ { "comment": "A.1. Adding an Object Member", "doc": { "foo": "bar" }, "patch": [ { "op": "add", "path": "/baz", "value": "qux" } ], "expected": { "baz": "qux", "foo": "bar" } }, { "comment": "A.2. Adding an Array Element", "doc": { "foo": [ "bar", "baz" ] }, "patch": [ { "op": "add", "path": "/foo/1", "value": "qux" } ], "expected": { "foo": [ "bar", "qux", "baz" ] } }, { "comment": "A.3. Removing an Object Member", "doc": { "baz": "qux", "foo": "bar" }, "patch": [ { "op": "remove", "path": "/baz" } ], "expected": { "foo": "bar" } }, { "comment": "A.4. Removing an Array Element", "doc": { "foo": [ "bar", "qux", "baz" ] }, "patch": [ { "op": "remove", "path": "/foo/1" } ], "expected": { "foo": [ "bar", "baz" ] } }, { "comment": "A.5. Replacing a Value", "doc": { "baz": "qux", "foo": "bar" }, "patch": [ { "op": "replace", "path": "/baz", "value": "boo" } ], "expected": { "baz": "boo", "foo": "bar" } }, { "comment": "A.6. Moving a Value", "doc": { "foo": { "bar": "baz", "waldo": "fred" }, "qux": { "corge": "grault" } }, "patch": [ { "op": "move", "from": "/foo/waldo", "path": "/qux/thud" } ], "expected": { "foo": { "bar": "baz" }, "qux": { "corge": "grault", "thud": "fred" } } }, { "comment": "A.7. Moving an Array Element", "doc": { "foo": [ "all", "grass", "cows", "eat" ] }, "patch": [ { "op": "move", "from": "/foo/1", "path": "/foo/3" } ], "expected": { "foo": [ "all", "cows", "eat", "grass" ] } }, { "comment": "A.8. Testing a Value: Success", "doc": { "baz": "qux", "foo": [ "a", 2, "c" ] }, "patch": [ { "op": "test", "path": "/baz", "value": "qux" }, { "op": "test", "path": "/foo/1", "value": 2 } ], "expected": { "baz": "qux", "foo": [ "a", 2, "c" ] } }, { "comment": "A.9. Testing a Value: Error", "doc": { "baz": "qux" }, "patch": [ { "op": "test", "path": "/baz", "value": "bar" } ], "error": "string not equivalent" }, { "comment": "A.10. Adding a nested Member Object", "doc": { "foo": "bar" }, "patch": [ { "op": "add", "path": "/child", "value": { "grandchild": { } } } ], "expected": { "foo": "bar", "child": { "grandchild": { } } } }, { "comment": "A.11. Ignoring Unrecognized Elements", "doc": { "foo":"bar" }, "patch": [ { "op": "add", "path": "/baz", "value": "qux", "xyz": 123 } ], "expected": { "foo":"bar", "baz":"qux" } }, { "comment": "A.12. Adding to a Non-existant Target", "doc": { "foo": "bar" }, "patch": [ { "op": "add", "path": "/baz/bat", "value": "qux" } ], "error": "add to a non-existant target" }, { "comment": "Invalid JSON Patch Document", "doc": { "foo": "bar" }, "patch": [ { "op": "add", "path": "/baz", "value": "qux", "op": "remove" } ], "error": "operation has two 'op' members" }, { "comment": "~ Escape Ordering", "doc": { "/": 9, "~1": 10 }, "patch": [{"op": "test", "path": "/~01", "value":"10"}], "expected": { "/": 9, "~1": 10 } } ]