AZ Tools

JSON Patch ビルダー (RFC 6902)

開発

RFC 6902 JSON PatchはJSONドキュメントへの変更を記述するワイヤーフォーマット — PATCHリクエスト·楽観的更新·元に戻すの履歴·運用変換に便利。このツールは両方向を処理: sourceとtarget JSONを貼り付け、最小patchを取得; またはsourceとpatchを貼り付け、適用後の結果を確認。diffはスラッシュやチルダを含むキーに `~0`/`~1` JSON Pointerエスケープを使った再帰的構造比較を使用。apply側は6つのopすべてを尊重 — `test`(アサーション失敗はエラー)·`copy`·`move` 含む。サーバーを呼ぶ前のpatchテスト、例で正しいopを見つけるのに便利。

Patch (RFC 6902)
[
  {
    "op": "replace",
    "path": "/age",
    "value": 31
  },
  {
    "op": "replace",
    "path": "/address/city",
    "value": "Busan"
  },
  {
    "op": "remove",
    "path": "/address/zip"
  },
  {
    "op": "add",
    "path": "/address/country",
    "value": "KR"
  },
  {
    "op": "replace",
    "path": "/tags/1",
    "value": "owner"
  },
  {
    "op": "add",
    "path": "/tags/2",
    "value": "user"
  }
]

純粋RFC 6902 — add·remove·replace·move·copy·test opと `~0`/`~1` pointerエスケープに対応。

使い方

  1. Diffモード: sourceとtargetを貼り付け、patch JSONを確認。片方を編集してpatchがどう変わるか確認。
  2. Applyモード: sourceとpatch配列を貼り付け、結果ドキュメントを確認。エラー(不正なpointer·失敗した `test`)はインラインで表示。
  3. JSON Pointer構文: `/foo/0/bar` は `foo.0.bar` を辿る。`/` は `~1`、`~` は `~0` でエスケープ。配列パスの末尾 `-` は『追加』の意味。

よくある質問

なぜ新しいドキュメントを送らない?
1つは帯域幅。2つは並行性: AliceとBobの両方がドキュメントを編集する場合、patchは意味的にマージ可能(`replace /name` は `add /tags/-` と互換性あり)、2つの完全ドキュメントなら勝者を選ばないといけない。さらにpatchは何が·いつ変わったかの正確な監査証跡。
JSON Merge Patch (RFC 7396) と同じ?
違う。Merge Patchはよりシンプル — 存在するキーが上書きし `null` が削除する部分ドキュメントを送る。人間には簡単だが精度を失う(配列に追加できない·リテラル `null` 値を表現できない·原子的テストなし)。RFC 6902(このツール)は正確なワイヤーフォーマット。RFC 7396は利便性フォーマット。

関連ツール