差分ツールにJSONを2つ貼ったら、キーの並びが違うだけで全行が「差分あり」になった。
そんな経験はありませんか?
どこが本当に変わったのか、パスで教えてほしいときのためのツールです。
2つのJSONを貼るだけで、追加・削除・値変更・型変更を $.users[2].name のようなキーのパス単位で一覧にします。
使い方
- 左の欄にJSON A(比較元)、右の欄にJSON B(比較先)を貼り付けます。入力と同時に差分が一覧に出ます。
- 一覧の各行には「追加・削除・値変更・型変更」の種類と、変更箇所のパス、内容が並びます。
- 配列の中身がまるごと入れ替わっただけなら、「配列の順序を無視して比較」にチェックを入れてください。ここまでが基本の使い方で、次からは仕組みの話です。
- どちらかのJSONにミスがあれば、修正すべき行と文字位置が表示されます。
仕組み・計算式
オブジェクトの比較は、キーの集合として行います。JSONの仕様(ECMA-404)はオブジェクトのメンバー順序を規定していないため、キーの並びだけが違うものは差分として扱いません。配列は既定でインデックスが同じ要素同士を比較します。ためしに配列の先頭へ要素を1つ挿し込んで試すと、後ろの要素が中身は同じなのに全部「値変更」として出ました。中身ではなく増減だけを見たいときは「順序を無視」に切り替えると、同じ値がいくつあるかだけを比較する集合比較になります。
数値の型も現場でよく迷うところです。JSONの数値には整数と浮動小数の区別がなく、1 と 1.0 はパース後どちらも同じ数値になるため差分になりません。一方で "1"(文字列)と 1(数値)はJavaScriptの型が異なるため「型変更」として拾います。正直なところ、この2つを混同したAPI連携のバグ調査に、何度か助けられました。
よくある質問
Q. キーの順序が違うだけでも差分として表示されますか?
A. いいえ。オブジェクトはどちらのJSONにそのキーがあるかだけを見るため、順序だけの違いは無視します。
Q. 配列の要素を先頭に1つ追加すると、後ろの要素も全部「変更」になりますか?
A. 既定のインデックス比較ではそうなります。中身ではなく個数の増減だけを知りたいときは「順序を無視」を使ってください。
Q. とても大きなJSONでも動きますか?
A. ブラウザの JSON.parse が読み込める範囲であれば動きます。ただ数万行規模までは試していません。
Q. NaNやundefinedを含むデータは比較できますか?
A. できません。JSONの仕様にNaNやundefinedは存在しないため、貼り付けた時点で構文エラーになります。
関連ツール
最終更新・根拠の確認日: 2026-09-17 · カテゴリ: 開発・データ