JSON 差分
最終更新:2026年10月2日
2 つの JSON ドキュメントを比較し、本当に違う部分だけを表示します。比較は構造で行うため、キーの並べ替えや再フォーマットは差分になりません。実際の変更をパスごとに一覧します。すべてブラウザ内で完結します。
構造による比較が見るもの
両方のドキュメントはまず解析され、それから一緒に走査されます。報告されるのはデータそのものの違いだけです。片側にしかないキー、値の変更、型の変更——数値が文字列になった、オブジェクトが配列になった、といったものです。空白とキーの順序は比較に一切関与しません。解析後には存在しないからです。
型の変更は、それが起きたパスで 1 回だけ報告されます。下にある葉ノードごとに削除と追加へ展開されることはありません。サブツリー全体が形を変えたときに、レポートを読みやすく保てます。
これがテキストの行差分ではない理由
テキストの差分——git diff が示すもの——は行を比較します。JSON では、これがしばしば誤解を招きます。JSON を別のツールや別のバージョンのライブラリが生成すると、再インデントや、同じキーを違う順序で出力することはごく普通に起こり、行差分はそれを、データが同一であるにもかかわらず大量の変更に見せてしまいます。
次の 2 つのドキュメントは同じドキュメントです。行差分は 4 行の変更を報告しますが、このツールは何も報告しません。
{"a": 1, "b": 2}
{
"b": 2,
"a": 1
}
逆も成り立ち、そこが役に立つところです。キー名の 1 文字の変更や、数値が 3 から 4 への変更は、ちょうど 1 件の変更として示され、整形のノイズに埋もれません。
パス表記の読み方
すべての変更はパスで報告されます。$ はドキュメントのルート、ドットはオブジェクトのキーへ進み、角括弧は配列の添字です。つまり $.settings.indent は settings の中の indent キー、$.features[2] は features 配列の 3 番目の項目、$["weird key"] は単純な識別子でないキーを表します。表記は JSON Pointer と同じ流儀なので、レポートのパスはそのまま他の JSON ツールに貼り付けられます。
差分が教えてくれないこと
- 配列は位置で突き合わせます。長い配列の先頭に項目を挿入すると、それ以降の要素が 1 つずつ後ろにずれ、値が移動しただけでもそれぞれが変更として報告されます。突き合わせるキーを持たない差分の、正直な限界です。項目に安定した
idがあれば、先に両側をその id で並べ替えるか、その id で索引した版を比較してください。 - パッチではありません。これは差分を報告するものであり、JSON Patch(RFC 6902)ドキュメントを出力せず、移動した塊も検出しません。移動した値は、古いパスでの削除と新しいパスでの追加として現れます。
- 値は完全一致で比較します。
1と1.0はパーサーにとって同じ数ですが、1と"1"は違い、キーが無いこととnullを明示したキーは違います。
よくある質問
キーの順序は比較結果に影響しますか?
いいえ。両方のドキュメントは比較の前に解析され、オブジェクトのキーは位置ではなく名前で突き合わせます。したがって、再フォーマットしたりキーを別の順序で出力したりしても差分は空になり、これは正しい結果です。データは同じだからです。
配列の先頭に 1 項目を挿入しただけで、なぜこんなに多くの差分が出るのですか?
配列は位置で突き合わせます。これはほとんどすべての構造差分ツールと同じです。長い配列の先頭に項目を挿入すると、それ以降の要素が 1 つずつ後ろにずれるため、値が移動しただけでもそれぞれが変更として報告されます。突き合わせるキーがなければ、どの項目が挿入でどれが変更かを知る方法はありません。項目に安定した id があるなら、比較の前に両側をその id で並べ替えてください。
片側が有効な JSON でない場合はどうなりますか?
比較は停止し、失敗した側のパーサー自身のメッセージを、左か右かを示して表示します。両方が解析できないと 2 つのドキュメントを一緒に走査できないため、比較は行われません。
私の JSON はどこかにアップロードされますか?
いいえ。両方のドキュメントはブラウザ内で JSON.parse によって解析され、メモリ上で比較されます。それらを運ぶリクエストはなく、アカウントもサーバー側の保存もありません。ページを読み込んだあとにネットワークを切断しても、比較は動作します。
値が変更ではなく移動したことを判定できますか?
いいえ。このツールは差分を報告するもので、パッチを作るものではありません。JSON Patch ドキュメントを出力せず、ある場所から別の場所へ移動した値を検出しません。古いパスでの削除と、新しいパスでの追加として表示されます。
コメントや末尾カンマのある JSON も比較できますか?
いいえ。比較はサイトの他のツールと同じ厳格なパーサーを使うため、JSON5、コメント、末尾カンマは拒否されます。解析に失敗する場合は、まずフォーマッターかバリデーターで問題の位置を確認してください。
JSON を表にしたいですか?JSON を CSV に変換 が使えます。不具合を見つけましたか?お問い合わせ。