てもとツール

JSON比較ツール|2つのJSONの差分をキーの順番を無視してパスで一覧表示

2つのJSONを値で比べ、追加・削除・変更・型の変化をパスつきで一覧にします。配列はキー(id など)で突き合わせでき、大きな整数の桁や重複キーも見落としません。

ブラウザ内処理 公開
詳細設定(配列の比べ方)
配列の比べ方

全要素がオブジェクトで、このキーの値が文字列か数値で重複しない配列だけを突き合わせます。 それ以外の配列は位置で比べ、結果の通知に理由を出します。

2 つの JSON を貼り付けて「比較する」を押してください

追加・削除・変更・型の変化が、パスつきの一覧で表示されます

このツールについて

使い方・特徴・補足情報

JSON比較とは

JSON比較は、2 つの JSON を値で比べて、違う所だけをパスつきで並べるツールです。 キーの順番・字下げ・改行の違いは差分に数えません。

結果は「追加・削除・変更・型の変化」の 4 種類に分けて出ます。 $.users[0].name のようなパスで、どこが違うかをそのまま探せます。

配列は、位置で比べるか、id などのキーで要素を突き合わせるかを選べます。 並びが変わっただけの一覧で、変更だらけになるのを防ぎます。

大きな整数の最後の桁の違いや、同じキーが 2 回ある JSON も知らせます。 どちらも JSON.parse で読むと見えなくなることがある差です。

こんな人におすすめ

API や設定ファイルを扱う開発者

楽になること

2 つの JSON の違いを探す作業

避けたい手間

並びの違いに埋もれて本物の差を見落とすこと

解決できる困りごと

  • キーの順番や字下げが違うだけの JSON を行で比べて、差分だらけになる手間が減ります
  • 一覧の並びが変わった API レスポンスで、1 件の挿入が後ろ全部の変更に見える混乱を避けられます
  • 数値の 1 と文字列の "1"、null とキーの欠落を取り違えたまま見過ごすのを防げます
  • JSON.parse で読むと同じになる大きな ID の違いを、差分なしと思い込むのを防げます
  • 全角スペースや濁点の分解のように、見た目では分からない文字列の違いを探す時間が減ります

使い方

  1. 変更前の JSON を左の欄に、変更後の JSON を右の欄に貼り付けます
  2. 配列の並びが変わる JSON なら、詳細設定で配列の比べ方を選びます
  3. 「比較する」を押し、上の件数で追加・削除・変更・型の変化の数を確かめます
  4. 一覧のパスと値を読み、必要ならコピーボタンで結果をテキストにします
  5. 通知欄で、書き方だけ違う数値や重複キーが無いかを見ます

使用例

キーの順番だけが違う 2 つの JSON

並びと字下げは差分に数えません。値が同じなら「値の違いはありません」と出ます。

入力

左: {"name":"佐藤","age":30}
右: {
  "age": 30,
  "name": "佐藤"
}

出力

追加 0 / 削除 0 / 変更 0 / 型の変化 0
値の違いはありません。キーの順番・空白・改行の違いは比べていません。

項目の追加と型の変化

数値の 30 が文字列の "30" になった所は「型の変化」として分けて出ます。

入力

左: {"id":1,"age":30}
右: {"id":1,"age":"30","email":"a@example.com"}

出力

[型の変化] $.age: 30(数値) → "30"(文字列)
[追加] $.email: "a@example.com"

並び替わった配列を id で突き合わせる

位置で比べると 2 件とも変更に見えますが、id で突き合わせると本当の変更 1 件だけが残ります。

入力

左: [{"id":1,"name":"A"},{"id":2,"name":"B"}]
右: [{"id":2,"name":"B2"},{"id":1,"name":"A"}]
配列の比べ方: キー「id」で突き合わせる

出力

[変更] $[id=2].name: "B" → "B2"

JSON.parse だと同じになる大きな ID

20 桁の ID は倍精度に丸めると同じ値になります。字面の 10 進数で比べるので差分として残ります。

入力

左: {"id":12345678901234567890}
右: {"id":12345678901234567891}

出力

[変更] $.id: 12345678901234567890 → 12345678901234567891
JSON.parse で読むと同じ値になる差です

活用シーン

API の改修前後でレスポンスを比べる

改修前と改修後のレスポンスを貼ります。増えた項目・消えた項目・型が変わった項目がパスで並びます。

本番と検証の設定ファイルを見比べる

キーの並び順が違う 2 つの設定でも、値が違う所だけが出ます。字下げをそろえ直す必要はありません。

並び順が変わる一覧データを確かめる

配列を id で突き合わせると、並びが変わっても同じ要素どうしで比べます。本当に変わった件だけが残ります。

テストの期待値と実際の出力を比べる

失敗したテストの期待値と出力を左右に貼ります。長い JSON のどこで食い違ったかを 1 行で示します。

データ移行の前後で中身を点検する

移行前後の JSON を比べ、大きな ID の桁や文字列の表記が変わっていないかを確かめます。

技術的な解説

補足: 仕組み

読み取りは JSON.parse を使わず、RFC 8259 の文法どおりに自前で行います。 数値の字面と、重複したキーを失わないためです。

数値は 1.0 を 1e0 のような 10 進の正規形にそろえて比べます。 値が同じで書き方だけ違う数値は、差分に数えず通知に回します。

文字列はエスケープを解いてから比べます。 空白の種類など見分けにくい違いは、Intl.Segmenter で最初に違う文字を探して示します。

もっと詳しく

配列の比べ方を 3 つから選ぶ理由

位置で比べると、先頭に 1 件挿入しただけで後ろの要素がすべて「変更」になります。 API の一覧のように並びが変わるデータでは、本物の差が埋もれます。

キーで突き合わせると、同じ id の要素どうしを比べます。 順番を無視する方式は、要素を丸ごと数え合わせ、一致しない要素だけを追加・削除に出します。

大きな整数と重複キーは JSON.parse で消える

JSON.parse は数値を倍精度で持つので、2 の 53 乗(約 9 千兆)を超える整数では末尾の違いが消えることがあります。 RFC 8259 も、倍精度の実装どうしで値が確実に一致する整数を、その範囲の内側としています。

同じキーが 2 回ある JSON では、JSON.parse は後の値だけを残します。 本ツールは後の値で比べたうえで、重複があった場所を知らせます。

テキスト比較ツールとの使い分け

行単位のテキスト比較は、キーの順番や字下げが違うだけで差分を出します。 JSON の意味は見ないので、値が同じでも赤と緑で埋まります。

本ツールは値の違いだけを出す代わりに、行の位置は示しません。 書式の変化まで確かめたいときは、テキスト比較と組み合わせてください。

よくある質問

キーの並び順の違いは差分になりますか?

なりません。オブジェクトのキーの順番は比べていません。

差分が 0 件のときも、比べていないもの(キーの順番・空白・改行)を結果の欄に書きます。

null とキーが無い状態は区別されますか?

区別します。{"a":null} と {} を比べると、$.a の削除として出ます。

null から文字列に変わった場合は「型の変化」になります。

1 と 1.0 は違う値として出ますか?

値が同じなので差分には数えません。1e0 や 10E-1 も同じ値として扱います。

書き方だけ違う数値として通知欄に並べるので、表記の揺れは確かめられます。

コメント付きの JSON や末尾のカンマは読めますか?

読めません。標準の JSON だけを読み、コメントや末尾のカンマは理由と行番号つきのエラーにします。

JSON5 などを比べたいときは、先に標準の JSON に直してください。

貼り付けた JSON はどこかに送られますか?

ツールに入力した JSON はブラウザの中だけで比べ、サーバーには送りません。社内 API のレスポンスも手元で確かめられます。

参考・出典

本ツールの計算式・判定基準は上記の公的機関・公式情報源を参考にしています。最新の情報は各リンク先をご確認ください。

関連記事

このツールの使い方や活用例をブログでも紹介しています。

関連ツール

同じカテゴリの他のツールも合わせてどうぞ。