無料オンラインツール
JSON diff|2つのJSONを比較して差分を表示
このツールの入力データはブラウザ内で処理します
2つのJSONを比較して、追加・削除・変更された項目をパスごとに表示する無料のJSON diffツールです。キーの順番の違いは無視し、配列はidなどのキーで対応させてJSONの差分を比べられます。差分のCSV・JSON Patch出力にも対応しています。
2つのJSONを比較(JSON diff)
比較したい2つのJSONを貼り付けるか、ファイルを選んでください。キーの順番の違いは無視して、項目ごとの差分を表示します。JSONはサーバーへ送信せず、ブラウザ内で比較します。
変更前(比較元)のJSON
変更後(比較先)のJSON
比較の設定(配列の比べ方・除外する項目など)
名前だけ書くと、どの階層にあっても除外します。「items[*].price」のように書くと、その位置だけを除外します(* は任意のキー、[*] は任意の要素)。
比較結果
両方を整形し、変更後のキーや配列の要素を変更前の順番にそろえてから、行ごとに比べています。除外した項目も表示されます。
JSON diffの使い方
- 「変更前(比較元)のJSON」と「変更後(比較先)のJSON」に、比較したいJSONを貼り付けるか、[ファイルを選択]でJSONファイルを読み込みます。
- 必要に応じて「比較の設定」で、配列の比べ方や、比較から除外する項目を指定します。
- [JSONを比較]を押すと、JSONの差分が「差分の一覧」に表示されます。小さいJSONは入力するたびに自動で比較します。
- 「左右に並べて表示」で、変更前と変更後のJSONを並べて確認できます。結果はコピーやCSV、JSON Patchで書き出せます。
[サンプルで試す]を押すと、キーの順番や配列の順番が違うJSONを比較する例を確認できます。
JSONの比較で表示される差分の種類
| 種類 | 意味 | 例 |
|---|---|---|
| 追加 | 変更後のJSONにだけある項目 | user.phone が増えた |
| 削除 | 変更前のJSONにだけある項目 | user.email がなくなった |
| 変更 | 同じ位置にあり、値が違う項目 | version が "1.2.0" → "1.3.0" |
| 型の変更 | 値の種類(文字列・数値・配列など)が違う項目 | price が 80(数値)→ "80"(文字列) |
差分の位置は user.address.city や items[0].price のようなパスで表示します。配列をキーで対応させた場合は、items[id=3].price のように、どの要素の差分かが分かる形で表示します。
テキストの差分とJSON diffの違い
一般的なテキストの比較(diff)では、行ごとに文字を比べるため、キーの順番が入れ替わっただけでも多くの行が「違う」と表示されます。改行やインデントの付け方が違うだけのJSONも、別物として扱われます。
このツールはJSONを構造として読み取ってから比較するため、キーの順番や空白・改行の違いは差分になりません。実際に値が変わった項目だけを、パスと変更前・変更後の値で一覧にできます。「左右に並べて表示」でも、両方のJSONを同じ形に整形し、キーの順番をそろえてから比べます。
配列を含むJSONの差分を正しく比べる
配列の要素の順番が変わると、位置で比べたときにすべての要素が「変更」に見えることがあります。目的に合わせて比べ方を選んでください。
- 位置(順番)で比べる:1番目どうし、2番目どうしを比較します。順番に意味がある配列に使います。
- キーで要素を対応させて比べる:
idなどのキーが同じ要素どうしを比較します。順番が変わっても、本当に変わった値だけが差分になります。キー名は「id, code」のように複数指定でき、要素がすべて持っている最初のキーを使います。キーがない要素や、値が重複する要素がある配列は、位置で比べて知らせます。 - 順番を無視して比べる:同じ値があるかどうかだけを比べ、増えた値と減った値を表示します。タグやIDの一覧などに使います。
比較から除外する項目の書き方
| 書き方 | 除外する項目 |
|---|---|
updatedAt | どの階層にあっても、updatedAt という名前の項目 |
$.updatedAt | 一番上の階層の updatedAt だけ |
items[*].updatedAt | items の各要素の updatedAt |
meta.* | meta の中のすべての項目 |
日時、リクエストID、トークンなど、比較のたびに変わる項目を除外すると、本当に確認したいJSONの差分だけを見られます。
大きな整数や重複したキーの扱い
JavaScriptでは、16桁を超えるような大きな整数を数値として正確に扱えません。一般的なツールでは 12345678901234567890 と 12345678901234567891 が同じ値に見えることがありますが、このJSON diffは元の数字の並びのまま比較するため、違いを見落としません。1.0 と 1 のような書き方の違いは、初期設定では同じ値として扱います。
同じオブジェクトの中に同じキーが2回ある場合は、場所を表示して知らせます。比較には、一般的なJSONの読み込みと同じく後の値を使います。
利用上の注意
- 読み込めるファイルは50MBまでです。2MBを超えるファイルは、入力欄には表示せずに比較します。ファイルはUTF-8で保存されたものを使ってください。
- 差分の一覧は先頭1,000件まで画面に表示します。それより多い場合は、CSVですべて確認できます(10万件まで)。
- 左右に並べた表示は、行数や違いが多すぎる場合は省略します。除外した項目も、左右に並べた表示には表示されます。
- JSON Patchは、配列を位置で比べて作ります。除外した項目はJSON Patchに含めません。
よくある質問
JSONを比較するとき、キーの順番が違っても大丈夫ですか?
大丈夫です。このJSON diffはJSONを構造として読み取って比較するため、{"a":1,"b":2} と {"b":2,"a":1} は同じ内容として扱います。改行やインデントなど、書き方の違いも差分になりません。
配列の順番だけが違う場合も差分になりますか?
初期設定では配列を位置(順番)で比べるため、順番が違うと差分になります。「キーで要素を対応させて比べる」でidなどのキー名を指定すると、順番が違っても同じidの要素どうしを比較します。タグの一覧のような単純な値の配列は、「順番を無視して比べる」が便利です。
毎回変わる日時などを差分から除外できますか?
できます。「比較から除外する項目」に updatedAt のように名前を書くと、どの階層にあってもその項目を除外します。items[*].updatedAt のように書くと、その位置だけを除外します。
JSONの差分をファイルで保存できますか?
差分の一覧はCSVでダウンロードでき、Excelでも開けます。変更前のJSONを変更後に変える手順は、JSON Patch(RFC 6902)形式でダウンロードできます。[差分をコピー]では、テキストとしてコピーできます。
JSON Lines(NDJSON)も比較できますか?
できます。1行に1つのJSONが書かれたテキストを貼り付けると自動で判定し、1行目どうし、2行目どうしのように比較します。キーで対応させる設定を使うと、行の順番が違っていても比較できます。
APIのレスポンスなど、公開したくないJSONを比較しても安全ですか?
JSONの読み込みと比較はすべてブラウザ内で行い、サーバーへ送信しません。比較が終わったら、ページを閉じれば入力した内容は残りません。