Appendix A. 示例 (Examples)
A.1. 添加对象成员 (Adding an Object Member)
示例目标 JSON 文档:
{ "foo": "bar"}
JSON Patch 文档:
[
{ "op": "add", "path": "/baz", "value": "qux" }
]
生成的 JSON 文档:
{
"baz": "qux",
"foo": "bar"
}
A.2. 添加数组元素 (Adding an Array Element)
示例目标 JSON 文档:
{ "foo": [ "bar", "baz" ] }
JSON Patch 文档:
[
{ "op": "add", "path": "/foo/1", "value": "qux" }
]
生成的 JSON 文档:
{ "foo": [ "bar", "qux", "baz" ] }
A.3. 移除对象成员 (Removing an Object Member)
示例目标 JSON 文档:
{
"baz": "qux",
"foo": "bar"
}
JSON Patch 文档:
[
{ "op": "remove", "path": "/baz" }
]
生成的 JSON 文档:
{ "foo": "bar" }
A.4. 移除数组元素 (Removing an Array Element)
示例目标 JSON 文档:
{ "foo": [ "bar", "qux", "baz" ] }
JSON Patch 文档:
[
{ "op": "remove", "path": "/foo/1" }
]
生成的 JSON 文档:
{ "foo": [ "bar", "baz" ] }
A.5. 替换值 (Replacing a Value)
示例目标 JSON 文档:
{
"baz": "qux",
"foo": "bar"
}
JSON Patch 文档:
[
{ "op": "replace", "path": "/baz", "value": "boo" }
]
生成的 JSON 文档:
{
"baz": "boo",
"foo": "bar"
}
A.6. 移动值 (Moving a Value)
示例目标 JSON 文档:
{
"foo": {
"bar": "baz",
"waldo": "fred"
},
"qux": {
"corge": "grault"
}
}
JSON Patch 文档:
[
{ "op": "move", "from": "/foo/waldo", "path": "/qux/thud" }
]
生成的 JSON 文档:
{
"foo": {
"bar": "baz"
},
"qux": {
"corge": "grault",
"thud": "fred"
}
}
A.7. 移动数组元素 (Moving an Array Element)
示例目标 JSON 文档:
{ "foo": [ "all", "grass", "cows", "eat" ] }
JSON Patch 文档:
[
{ "op": "move", "from": "/foo/1", "path": "/foo/3" }
]
生成的 JSON 文档:
{ "foo": [ "all", "cows", "eat", "grass" ] }
A.8. 测试值: 成功 (Testing a Value: Success)
示例目标 JSON 文档:
{
"baz": "qux",
"foo": [ "a", 2, "c" ]
}
将成功求值的 JSON Patch 文档:
[
{ "op": "test", "path": "/baz", "value": "qux" },
{ "op": "test", "path": "/foo/1", "value": 2 }
]
A.9. 测试值: 错误 (Testing a Value: Error)
示例目标 JSON 文档:
{ "baz": "qux" }
将导致错误条件的 JSON Patch 文档:
[
{ "op": "test", "path": "/baz", "value": "bar" }
]
A.10. 添加嵌套成员对象 (Adding a Nested Member Object)
示例目标 JSON 文档:
{ "foo": "bar" }
JSON Patch 文档:
[
{ "op": "add", "path": "/child", "value": { "grandchild": { } } }
]
生成的 JSON 文档:
{
"foo": "bar",
"child": {
"grandchild": {
}
}
}
A.11. 忽略无法识别的元素 (Ignoring Unrecognized Elements)
示例目标 JSON 文档:
{ "foo": "bar" }
JSON Patch 文档:
[
{ "op": "add", "path": "/baz", "value": "qux", "xyz": 123 }
]
生成的 JSON 文档:
{
"foo": "bar",
"baz": "qux"
}
A.12. 添加到不存在的目标 (Adding to a Nonexistent Target)
示例目标 JSON 文档:
{ "foo": "bar" }
JSON Patch 文档:
[
{ "op": "add", "path": "/baz/bat", "value": "qux" }
]
将此 JSON Patch 文档应用到上面的目标 JSON 文档会导致错误 (因此不会应用), 因为 "add" 操作的目标位置既未引用文档根, 也未引用现有对象的成员, 也未引用现有数组的成员.
A.13. 无效的 JSON Patch 文档 (Invalid JSON Patch Document)
JSON Patch 文档:
[
{ "op": "add", "path": "/baz", "value": "qux", "op": "remove" }
]
此 JSON Patch 文档不能被视为 "add" 操作, 因为它包含后出现的 "op":"remove" 元素. JSON 以 "SHOULD" 要求对象成员名称唯一, 且没有针对重复项的标准错误处理.
A.14. ~ 转义顺序 (~ Escape Ordering)
示例目标 JSON 文档:
{
"/": 9,
"~1": 10
}
JSON Patch 文档:
[
{"op": "test", "path": "/~01", "value": 10}
]
生成的 JSON 文档:
{
"/": 9,
"~1": 10
}
A.15. 比较字符串和数字 (Comparing Strings and Numbers)
示例目标 JSON 文档:
{
"/": 9,
"~1": 10
}
JSON Patch 文档:
[
{"op": "test", "path": "/~01", "value": "10"}
]
这会导致错误, 因为测试失败. 文档值是数字, 而被测试的值是字符串.
A.16. 添加数组值 (Adding an Array Value)
示例目标 JSON 文档:
{ "foo": ["bar"] }
JSON Patch 文档:
[
{ "op": "add", "path": "/foo/-", "value": ["abc", "def"] }
]
生成的 JSON 文档:
{ "foo": ["bar", ["abc", "def"]] }