シルギア

JSONの差分比較とは?構造で比べるツールで追加・削除・変更を見抜く

公開日:2026年10月11日 更新日:2026年9月15日 運営:シルギア(アナライズギア株式会社) 対象ツール:JSONの差分比較

JSONの「構造差分」とは何か

2つのJSONを比べる方法は大きく2つあります。1つは文字や行の並びをそのまま見比べるテキスト差分、もう1つは、いったんデータ構造として読み込んでから中身を突き合わせる構造差分です。JSON差分ツールは後者にあたります。テキスト差分は、インデントを整えただけ、キーの順番を入れ替えただけでも「差分あり」と表示されてしまいます。一方この構造差分は、まず両方を JSON.parse でオブジェクトや配列に変換し、キーや要素をたどって再帰的に比較します。そのため改行・空白・キー順といった見た目の違いには左右されず、実際に意味のある差——どのキーが増えた・減った・値が変わったか——だけを取り出せます。「見た目の差」ではなく「データの差」を知りたいときに向いています。

追加・削除・変更の3つの見方

差分は3種類の記号で表されます。それぞれの意味は次のとおりです。

  • +(追加):新しいほう(B)だけにあるキーや要素。
  • −(削除):古いほう(A)だけにあり、Bで無くなったもの。
  • 〜(変更):両方にあって値が違うもの。「旧→新」の形で変わる前と後を並べて示します。

値が同じ項目は既定では省略され、件数だけが結果の下に表示されます。「値が同じ項目も表示する」にチェックを入れると、変わっていない項目(=)も含めた全体像を一覧できます。画面上部の差分サマリでは、追加・削除・変更がそれぞれ何件あるかをまとめて確認できます。

実際の差分例で読んでみる

旧(A)と新(B)に、次の2つのJSONを貼り付けたとします。まずA(旧)は以下の内容です。

  • name:"田中太郎"
  • age:28
  • active:true
  • phone:"090-1234-5678"
  • address:{ city:"東京", zip:"100-0001" }
  • tags:[ "news", "tech" ]

続いてB(新)は次のように変わっています。

  • name:"田中太郎"(変わらず)
  • age:"28"(数値から文字列へ)
  • active:true(変わらず)
  • address:{ city:"大阪", zip:"100-0001" }
  • tags:[ "news", "tech", "sports" ]
  • email:"tanaka@example.com"

このとき、ツールが表示する差分は次のようになります。

  • 〜 age: 28 → "28"
  • − phone: "090-1234-5678"
  • 〜 address.city: "東京" → "大阪"
  • + tags[2]: "sports"
  • + email: "tanaka@example.com"

差分サマリは「差分 5 件 / 追加 2・削除 1・変更 2」となります。nameとactive、tagsの先頭2つは値が同じなので省略されています。文字列は "..." で囲んで表示されるため、数値の 28 と文字列の "28" が見た目でも区別できます。

ネストしたパスと配列の表し方

差分の場所は、根(ルート)から辿れるパス付きで示されます。オブジェクトのキーはドットでつなぎ、配列の要素は角括弧付きのインデックスで表します。先ほどの例なら address の中の city は address.city、tags の3番目(0から数えて2番目)の要素は tags[2] です。さらに深い位置でも user.address.city や items[0].name のように、どれだけネストしていても一目で場所が分かります。配列は同じインデックス同士(0番目と0番目、1番目と1番目…)を突き合わせ、要素数が違えば多い側の余った末尾を追加または削除として扱います。上の例で tags[2] の "sports" が追加と判定されたのは、Aの配列が2要素、Bが3要素で、3番目がBだけに存在するからです。

型の変更を見逃さない

JSONでは、文字列 "28" と数値 28、真偽値 true と文字列 "true" は別物です。このツールは型が異なれば、値が同じに見えても「変更」として扱い、旧→新を表示します。上の例の age がまさにそれで、28(数値)から "28"(文字列)への変化を変更として検出しています。型の違いは、整形しただけのテキスト差分では気づきにくく、プログラムの動作を静かに壊す原因になりがちです。APIの仕様変更で数値が文字列になった、真偽値のはずが文字列で返ってきた——そうした見落としやすい差を確実に拾えるのが構造差分の強みです。

使いどころと注意点

主な使いどころは、APIレスポンスの新旧比較(フィールドの増減や型変更の確認)、設定ファイルやマニフェストの変更点レビュー、データ移行の前後チェック(移行前と移行後で欠けた項目がないか)、本番と検証など環境ごとの設定差の洗い出しです。差分はテキストとしてコピーできるので、レビューコメントや不具合報告にそのまま貼り付けられます。

注意したいのは対応の取り方です。オブジェクトはキー名で対応付けるため、キーの順番を入れ替えても差分は出ません。一方、配列はインデックスで対応させるので、並び順に意味があります。先頭に1要素を差し込むと、それ以降がすべて1つずつずれ、「全部変更されたように見える」ことがあります。履歴のような順序付きリストでは、比較前に並びを揃えておくと差分が読みやすくなります。処理はすべてブラウザ内で完結し、貼り付けたJSONはどこにも送信されません。機密を含む設定ファイルも安心して比較できます。

「JSONの差分比較」を使ってみる →

ほかの記事

QR・バーコードメーカーの使い方|URL・WiFi・連絡先を1画面で作る Markdownオールインワンの使い方|編集・目次・表・HTML変換を1画面で エンコード・変換オールインワンの使い方|1入力で全形式を見比べる 角丸・影・グラデ・変形を1画面で重ねるCSSジェネレーターの使い方 カラーツールボックスの使い方|1色で変換・コントラスト・配色を一括 JSON・データ変換オールインワンの使い方|1回貼って全形式へ

記事一覧をすべて見る →