附录 A. 示例 (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"]] }