Appendix A. Examples
A.1. Adding an Object Member
An example target JSON document:
{ "foo": "bar"}
A JSON Patch document:
[
{ "op": "add", "path": "/baz", "value": "qux" }
]
The resulting JSON document:
{
"baz": "qux",
"foo": "bar"
}
A.2. Adding an Array Element
An example target JSON document:
{ "foo": [ "bar", "baz" ] }
A JSON Patch document:
[
{ "op": "add", "path": "/foo/1", "value": "qux" }
]
The resulting JSON document:
{ "foo": [ "bar", "qux", "baz" ] }
A.3. Removing an Object Member
An example target JSON document:
{
"baz": "qux",
"foo": "bar"
}
A JSON Patch document:
[
{ "op": "remove", "path": "/baz" }
]
The resulting JSON document:
{ "foo": "bar" }
A.4. Removing an Array Element
An example target JSON document:
{ "foo": [ "bar", "qux", "baz" ] }
A JSON Patch document:
[
{ "op": "remove", "path": "/foo/1" }
]
The resulting JSON document:
{ "foo": [ "bar", "baz" ] }
A.5. Replacing a Value
An example target JSON document:
{
"baz": "qux",
"foo": "bar"
}
A JSON Patch document:
[
{ "op": "replace", "path": "/baz", "value": "boo" }
]
The resulting JSON document:
{
"baz": "boo",
"foo": "bar"
}
A.6. Moving a Value
An example target JSON document:
{
"foo": {
"bar": "baz",
"waldo": "fred"
},
"qux": {
"corge": "grault"
}
}
A JSON Patch document:
[
{ "op": "move", "from": "/foo/waldo", "path": "/qux/thud" }
]
The resulting JSON document:
{
"foo": {
"bar": "baz"
},
"qux": {
"corge": "grault",
"thud": "fred"
}
}
A.7. Moving an Array Element
An example target JSON document:
{ "foo": [ "all", "grass", "cows", "eat" ] }
A JSON Patch document:
[
{ "op": "move", "from": "/foo/1", "path": "/foo/3" }
]
The resulting JSON document:
{ "foo": [ "all", "cows", "eat", "grass" ] }
A.8. Testing a Value: Success
An example target JSON document:
{
"baz": "qux",
"foo": [ "a", 2, "c" ]
}
A JSON Patch document that will result in successful evaluation:
[
{ "op": "test", "path": "/baz", "value": "qux" },
{ "op": "test", "path": "/foo/1", "value": 2 }
]
A.9. Testing a Value: Error
An example target JSON document:
{ "baz": "qux" }
A JSON Patch document that will result in an error condition:
[
{ "op": "test", "path": "/baz", "value": "bar" }
]
A.10. Adding a Nested Member Object
An example target JSON document:
{ "foo": "bar" }
A JSON Patch document:
[
{ "op": "add", "path": "/child", "value": { "grandchild": { } } }
]
The resulting JSON document:
{
"foo": "bar",
"child": {
"grandchild": {
}
}
}
A.11. Ignoring Unrecognized Elements
An example target JSON document:
{ "foo": "bar" }
A JSON Patch document:
[
{ "op": "add", "path": "/baz", "value": "qux", "xyz": 123 }
]
The resulting JSON document:
{
"foo": "bar",
"baz": "qux"
}
A.12. Adding to a Nonexistent Target
An example target JSON document:
{ "foo": "bar" }
A JSON Patch document:
[
{ "op": "add", "path": "/baz/bat", "value": "qux" }
]
This JSON Patch document, applied to the target JSON document above, would result in an error (therefore, it would not be applied), because the "add" operation's target location that references neither the root of the document, nor a member of an existing object, nor a member of an existing array.
A.13. Invalid JSON Patch Document
A JSON Patch document:
[
{ "op": "add", "path": "/baz", "value": "qux", "op": "remove" }
]
This JSON Patch document cannot be treated as an "add" operation, because it contains a later "op":"remove" element. JSON requires that object member names be unique with a "SHOULD" requirement, and there is no standard error handling for duplicates.
A.14. ~ Escape Ordering
An example target JSON document:
{
"/": 9,
"~1": 10
}
A JSON Patch document:
[
{"op": "test", "path": "/~01", "value": 10}
]
The resulting JSON document:
{
"/": 9,
"~1": 10
}
A.15. Comparing Strings and Numbers
An example target JSON document:
{
"/": 9,
"~1": 10
}
A JSON Patch document:
[
{"op": "test", "path": "/~01", "value": "10"}
]
This results in an error, because the test fails. The document value is numeric, whereas the value being tested for is a string.
A.16. Adding an Array Value
An example target JSON document:
{ "foo": ["bar"] }
A JSON Patch document:
[
{ "op": "add", "path": "/foo/-", "value": ["abc", "def"] }
]
The resulting JSON document:
{ "foo": ["bar", ["abc", "def"]] }