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を見つけるのに便利。
[
{
"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エスケープに対応。
使い方
- Diffモード: sourceとtargetを貼り付け、patch JSONを確認。片方を編集してpatchがどう変わるか確認。
- Applyモード: sourceとpatch配列を貼り付け、結果ドキュメントを確認。エラー(不正なpointer·失敗した `test`)はインラインで表示。
- 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は利便性フォーマット。
関連ツール
JSON ポインタ リゾルバ (RFC 6901)
/user/roles/0 のような RFC 6901 JSON ポインタを JSON 文書に対して解決 — ~0/~1 エスケープと URI フラグメント(#/…)対応 — 文書内の全ポインタのクリック可能な一覧付き、ブラウザ内で。
JSON Diff ビューア
2 つの JSON を構造的に比較 — 追加 / 削除 / 変更されたキーが正確に分かります。
Semver ツール(パーサー・比較・バンプ)
2 つのセマンティックバージョンを並べてパース・比較・バンプ。^x.y.z や ~x.y.z が実際にカバーする範囲を展開する機能付き。
PWA Manifest ビルダー
Progressive Web App用の有効な `manifest.json` を構築 — 名前·アイコン·テーマカラー·表示モード·スコープ·方向 — 対応するHTML `<link>` とAppleメタタグ付き。
Quoted-Printable エンコーダー & デコーダー
テキストを MIME Quoted-Printable(RFC 2045)にエンコード、または復号 — =XX エスケープ・ソフト改行・UTF-8 に対応、エンコード時は 76 文字で折り返し — ブラウザ内で。
JWK ↔ PEM 変換ツール
JWK や JWKS 全体を PEM 公開鍵に、またその逆に変換し、各鍵の RFC 7638 サムプリントもブラウザ内で計算します。