APIのレスポンスが変わった、設定ファイルを更新したい—— 2つのJSONを見比べて「何が変わったか」を確認したい場面は多くあります。 テキストの行単位で比較するdiffとは違い、JSONの構造を理解した 差分比較ツールでは、見え方の癖があります。本記事ではその読み方を解説します。
JSONのdiffでは、キーや値の違いが次の3種類に分類されます。
| 種類 | 意味 |
|---|---|
| 追加(added) | 比較後のJSONにのみ存在するキー・値 |
| 削除(removed) | 比較前のJSONにのみ存在するキー・値 |
| 変更(changed) | 同じキーだが値が異なるもの |
// 比較前
{ "name": "太郎", "age": 20 }
// 比較後
{ "name": "太郎", "age": 21, "city": "東京都" }
// 差分
age: 20 → 21 (変更)
city: (追加) "東京都"
一般的なテキストdiffは、行単位で前後を比較します。JSONを整形する際の インデントの量や改行の位置が変わっただけでも、意味上は同じデータなのに 「差分あり」と表示されてしまいます。一方、JSONの構造を理解した diffツールは、キーと値の対応関係で比較するため、見た目の整形差を 無視して、実質的な変更だけを抽出できます。
オブジェクトはキー名で対応関係がわかりますが、配列には名前がありません。 そのため、配列の比較方法には大きく2つの考え方があります。
配列を含むJSONのdiffで想定外の差分が出た場合は、要素の並び順が 変わっていないか、まず確認してみてください。
JSONのオブジェクトは、仕様上キーの順序に意味を持ちません。そのため、 まともなJSON diffツールでは、キーの並び順が入れ替わっただけでは 差分として検出されません。差分が出た場合は、順序ではなく、 値そのものが変わっていると考えるべきです。
片方のJSONに構文エラーがあると、正しく比較できません。差分が うまく表示されない場合は、先に JSONの構文エラーの直し方 を参考に、両方のJSONが正しい形式かを確認してください。
JSONのdiffは、追加・削除・変更の3種類で差分を表します。整形の違いや キーの順序は無視され、配列は比較方法によって結果の見え方が変わります。 想定外の差分が出たときは、まず配列の並び順を疑ってみてください。
2つのJSONの比較は JSON整形ツール のdiff機能から行えます。