🔀 JSONの差分比較
2つのJSON(A=旧 / B=新)を貼り付けると、追加・削除・値の変更されたキーを、ネストしたパス(例: user.address.city)付きで一覧表示します。オブジェクトはキー単位、配列はインデックス単位で再帰的に比較し、型が変わった場合も変更として検出します。すべてブラウザ内で処理し、入力内容はどこにも送信されません。
入力
差分サマリ
—
記号の意味
解説
このツールは、2つのJSONを「行の見た目」ではなく「データ構造」で比較します。まず両方を JSON.parse でオブジェクト/配列に変換し、キーや要素をたどりながら再帰的に突き合わせます。そのため、インデントや改行、キーの並び順、末尾の空白といった表記上の違いには左右されず、実際に意味のある差分(どのキーが増えた・減った・値が変わったか)だけを取り出せます。結果は user.address.city や items[0].name のように、根から辿れるパス付きで表示します。
比較の単位は型ごとに決めています。オブジェクトはキー名で対応付け、片方にしか無いキーは追加(+)または削除(−)、両方にあるキーは中身をさらに再帰比較します。配列は同じインデックス同士を比べ、要素数が違えば末尾のずれを追加・削除として扱います。文字列・数値・真偽値・null といった末端の値は、等しければ「同一」、違えば「変更(旧→新)」です。"5"(文字列)と 5(数値)のように型だけが変わった場合も、値の変更として検出します。
配列をインデックスで比較する仕様には注意点があります。先頭に1要素を差し込むと、それ以降がすべて1つずつずれて「全部変更されたように見える」ことがあります。これは行ベースのテキスト差分でも起こる現象で、要素の順序に意味がある配列(履歴・順番付きリストなど)では、比較前に並びを揃えておくと差分が読みやすくなります。逆に、キーで対応が取れるオブジェクトは順序を入れ替えても差分は出ません。
主な使いどころは、APIレスポンスの新旧比較(フィールドが増減していないか)、設定ファイルやマニフェストの変更点の確認、テストの期待値と実際の出力の突き合わせ、環境ごと(本番/検証)の設定差の洗い出しなどです。追加・削除・変更の件数サマリと、差分テキストのコピーにも対応しているので、レビューや報告にそのまま貼り付けられます。処理はすべて端末内(ブラウザ内)で行い、貼り付けたJSONはどこにも送信されません。
よくある質問
テキスト差分(text-diff)と何が違いますか?
テキスト差分は文字や行の並びをそのまま比べるため、インデントや改行、キーの順番を変えただけでも差分として表示されます。このツールは一度JSONを構造として読み込んでから比較するので、表記の違いは無視し、実際にキーや値が変わった箇所だけを取り出します。「見た目の差」ではなく「データの差」を知りたいときに向いています。
ネストした深いキーはどう表示されますか?
根からのパスをドットとブラケットでつないで表示します。オブジェクトのキーは user.address.city のようにドット区切り、配列の要素は items[0].name のように角括弧付きのインデックスになります。これによりどれだけ深い位置の差分でも、一目で場所が分かります。
配列はどのように比較されますか?
同じインデックス同士(0番目と0番目、1番目と1番目…)を突き合わせて比較します。要素数が違う場合は、多い側の余った末尾を追加または削除として扱います。そのため、途中に要素を挿入すると以降がずれて多くの変更として表示されることがあります。順序が重要でない配列は、事前に並びを揃えると差分が読みやすくなります。
型が変わった場合("5"と5など)も検出できますか?
はい。JSONでは文字列 "5" と数値 5、真偽値 true と文字列 "true" は別物です。このツールは型が異なれば値が同じに見えても「変更」として扱い、旧→新を表示します。APIの仕様変更で型が変わったといった見落としやすい差分の発見に役立ちます。
「値が同じ項目も表示する」は何のためのオプションですか?
通常は追加・削除・変更だけを表示して差分を見やすくしています。チェックを入れると、変わっていない項目(=)も含めて全項目を一覧できます。「本当にこのキーは両方に存在して同じ値なのか」を確認したいときや、全体像を書き出したいときに使ってください。省略した同一項目の件数は結果下に表示されます。
どんな場面で使うと便利ですか?
APIレスポンスの新旧比較(フィールドの増減・型変更の確認)、設定ファイルやマニフェストの変更点レビュー、テストの期待値と実際の出力の突き合わせ、本番と検証など環境ごとの設定差の洗い出しなどに向いています。差分をテキストでコピーできるので、レビューコメントや不具合報告にもそのまま貼り付けられます。
JSONが無効なときはどうなりますか?
A・Bそれぞれの欄の下に、パースできなかった理由(エラーメッセージ)を表示します。よくある原因は、末尾のカンマ、キーやコメントの記法(JSONにコメントは書けません)、シングルクォートの使用などです。両方が有効なJSONになると自動的に差分が計算されます。
貼り付けたJSONはサーバーに送られますか?
送られません。パースも比較もすべてブラウザ内(お使いの端末内)で完結し、入力内容はどこにも送信・保存されません。オフラインでも利用できます。機密を含む設定ファイルなども安心して比較できます。