使い方
- 古いJSONを左のJSONに、新しいJSONを右のJSONに貼り付けます。
- 配列がタグの一覧などの集合なら、配列の項目の順序を無視するにチェックを入れます。
- 違いの表を読みます。各行には値のパス(JSONポインター)があります。パッチの確認が適用できると示したら、JSON Patch(RFC 6902)をコピーします。
文書の比べ方
2つの文書は値によって比べられます。JSONではオブジェクトはメンバーの集合と定められているため、オブジェクトの名前の順序は問題になりません。配列は順序のあるリストなので、オプションにチェックを入れない限り、項目の順序が問題になります。
数値は数として比べるため、1と1.0は同じです。RFC 8259のセクション6は、-(2^53)+1から(2^53)-1までの整数はどの実装でも同じように読まれると述べています。それより長い整数は、読み取られるときに丸められることがあります。
パスとパッチ
パスはJSONポインター(RFC 6901)です。各段階は名前か添字で、スラッシュで区切ります。タグのリストの最初の項目は/tags/0で、空のパスは文書全体を指します。名前の中のスラッシュは~1、チルダは~0と書きます。
JSON Patch(RFC 6902)は、add、remove、replaceの3つの操作を使います。削除される配列の項目は後ろから取り除かれるため、使われる時点で各添字が正しいままになります。追加される項目は、RFC 6902が配列の末尾と定める添字「-」を付けて追加されます。
配列の順序を無視する
このオプションにチェックを入れると、項目は位置にかかわらず値で対応付けられます。対応する相手のない項目は、追加または削除として報告されます。順序が違うだけでなく内容も違う配列は、パッチでは配列全体が置き換えられます。項目がどう動いたかを知らないと、項目を動かすだけのパッチは作れないからです。パッチは、配列を右の文書の順序で書きます。
計算例:初期値の文書
左の文書には、名前FireToolLand、version 1、タグのjsonとcsv、freeがtrueの値があります。右の文書には、version 2、タグのcsv、json、yaml、そしてlicenseがnullの値があります。順に読むと、違いは6つです。version、変わった2つのタグ、追加されたyamlのタグ、削除されたfree、追加されたlicenseです。
「配列の項目の順序を無視する」にチェックを入れると、タグは順序だけが違う同じ2つの項目になるため、タグの違いはyamlだけになり、件数は4に減ります。
| 結果 | 初期値の文書 | 順序を無視 |
|---|---|---|
| 違いの数 | 6 | 4 |
| 要約 | 追加2件、削除1件、変更3件。 | 追加2件、削除1件、変更1件。 |
よくある質問
配列の項目の順序は、なぜ問題になるのですか?
JSONでは配列は順序のあるリストなので、[1,2]と[2,1]は別のデータです。タグや権限の一覧のように配列が集合である場合は、「配列の項目の順序を無視する」にチェックを入れてください。
/tags/0のようなパスは、何を意味しますか?
JSONポインター(RFC 6901)で、メンバーtagsと、その最初の項目を指します。添字は0から数えるためです。空のパスは文書全体を意味し、スラッシュを含む名前では、その代わりに~1と書きます。
1と1.0は同じ値ですか?
はい。どちらも数の1なので、ページは違いを報告しません。2^53より大きい整数はJSONのパーサーで丸められることがあるため、長い識別子は文字列として比べてください。
JSON Patchは何に使いますか?
サーバーやライブラリが、ある文書に適用して別の文書を得るための手順の一覧です(RFC 6902)。例えば、保存された設定ファイルを更新するときに使います。パッチの確認は、その手順で右の文書が得られることを示します。
順序を無視すると、配列全体が置き換えられるのはなぜですか?
順序を無視する場合、変わった配列を正しい配列に変えるための単一の手順は、項目がどう動いたかを知らないと作れません。そのためパッチは、正しい配列を全体で書きます。
入力したJSONは、どこかに送られますか?
いいえ。両方のテキストはお使いのブラウザの中で読み取られて比べられ、貼り付けた内容は、当サイトのサーバーに送られることも、保存されることもありません。
出典
- RFC 8259:JavaScript Object Notation(JSON)データ交換形式(英語)
- RFC 6901:JavaScript Object Notation(JSON)ポインター(英語)
- RFC 6902:JavaScript Object Notation(JSON)Patch(英語)
数値と文章の最終確認日:2026年11月10日火曜日。