メインコンテンツまでスキップ

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