付録 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"]] }