Skip to main content

附录 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"]] }