JSON を比較する方法
- 左側に元の JSON、右側に変更後の JSON を貼り付けるか、それぞれにファイルをドロップします。
- 概要と差分の一覧を確認します。追加・削除・変更された値は、
$.users[2].emailのようなパス付きで表示されます。 - 下にスクロールすると、左右に並べた表示で変更箇所を前後の文脈とともに確認できます。リスト項目の順序が関係ない場合は、配列の順序を無視にチェックを入れます。
テキスト比較ではなく意味で比べる JSON 差分
通常のテキスト差分は、キーの位置が変わったり、インデントが違ったり、数値の書き方が異なったりするだけで変更として報告します。この JSON diff はデータそのものを比較します。
- キーの順序は無視:
{"a":1,"b":2}と{"b":2,"a":1}は同じとみなされます。 - 書式は無視:スペース、改行、インデントの違いは影響しません。
- 数値は値で比較:
1.0と1は等しいとみなされます。 - 配列を整列して比較:要素を 1 つ挿入しても後続の要素がすべて変更扱いになることはなく、変更されたオブジェクトは最も似ている相手と対応付けられます。
- 配列の順序を無視:配列を順序のない集合として比較します。タグ、ID、権限のリストなどに便利です。
比較結果の見方
| ラベル | 意味 | パスが指す位置 |
|---|---|---|
| 追加 | 変更後の JSON にのみ存在する値 | 変更後の JSON での位置 |
| 削除 | 元の JSON にのみ存在する値 | 元の JSON での位置 |
| 変更 | 両方にキーがあるが、値または型が異なる | 変更後の JSON での位置 |
左右に並べた表示では、対応する行が向かい合うように、両方のドキュメントをキーでソートして整形します。変更のない長い部分は折りたたまれます(変更のない行を非表示のチェックを外すと展開されます)。
よくある質問
キーの順序は比較に影響しますか?
いいえ。JSON のオブジェクトは仕様上順序を持たないため、比較ではキーの順序を無視します。配列は順序どおりに比較されますが、「配列の順序を無視」にチェックを入れると順序を無視できます。
大きな JSON ファイルも比較できますか?
はい。比較はブラウザ内で実行され、最初の 200 件の差分を一覧表示します(ボタンですべて表示できます)。左右に並べた表示では最大 5,000 行まで表示されます。
コードで JSON を比較するには?
Python では json.loads(a) == json.loads(b) で等しいかどうかを判定できます。JavaScript には深い比較を行う組み込み機能がないため、Lodash などのライブラリの _.isEqual(a, b) を使います。コマンドラインでは diff <(jq -S . a.json) <(jq -S . b.json) で異なる行を表示できます。
データはアップロードされますか?
いいえ。2 つのドキュメントはブラウザ内でローカルに比較され、お使いのデバイスの外に送信されることはありません。