JSON差分比較(diff)の見方|追加・削除・変更をどう読むか

APIのレスポンスが変わった、設定ファイルを更新したい—— 2つのJSONを見比べて「何が変わったか」を確認したい場面は多くあります。 テキストの行単位で比較するdiffとは違い、JSONの構造を理解した 差分比較ツールでは、見え方の癖があります。本記事ではその読み方を解説します。

差分の3種類:追加・削除・変更

JSONのdiffでは、キーや値の違いが次の3種類に分類されます。

種類意味
追加(added)比較後のJSONにのみ存在するキー・値
削除(removed)比較前のJSONにのみ存在するキー・値
変更(changed)同じキーだが値が異なるもの
// 比較前
{ "name": "太郎", "age": 20 }

// 比較後
{ "name": "太郎", "age": 21, "city": "東京都" }

// 差分
age: 20 → 21 (変更)
city: (追加) "東京都"

テキストdiffとの違い

一般的なテキストdiffは、行単位で前後を比較します。JSONを整形する際の インデントの量や改行の位置が変わっただけでも、意味上は同じデータなのに 「差分あり」と表示されてしまいます。一方、JSONの構造を理解した diffツールは、キーと値の対応関係で比較するため、見た目の整形差を 無視して、実質的な変更だけを抽出できます。

配列の比較で混乱しやすい理由

オブジェクトはキー名で対応関係がわかりますが、配列には名前がありません。 そのため、配列の比較方法には大きく2つの考え方があります。

配列を含むJSONのdiffで想定外の差分が出た場合は、要素の並び順が 変わっていないか、まず確認してみてください。

キーの順序は差分として扱われない

JSONのオブジェクトは、仕様上キーの順序に意味を持ちません。そのため、 まともなJSON diffツールでは、キーの並び順が入れ替わっただけでは 差分として検出されません。差分が出た場合は、順序ではなく、 値そのものが変わっていると考えるべきです。

比較前に構文エラーがないか確認する

片方のJSONに構文エラーがあると、正しく比較できません。差分が うまく表示されない場合は、先に JSONの構文エラーの直し方 を参考に、両方のJSONが正しい形式かを確認してください。

まとめ

JSONのdiffは、追加・削除・変更の3種類で差分を表します。整形の違いや キーの順序は無視され、配列は比較方法によって結果の見え方が変わります。 想定外の差分が出たときは、まず配列の並び順を疑ってみてください。

2つのJSONの比較は JSON整形ツール のdiff機能から行えます。

戻る