# 2つのJSONファイルを比較する方法

2つのJSONファイルを来たまま比較すると、光るもののほとんどは何でもありません。インデント、行の折り返し、順序の違うキー。直し方は、より賢い差分ではなく——先に両方のファイルを同じフォーマッターに通して、残るのが本物の違いだけになるようにすることです。どちらの手順もブラウザの中で走ります。秘密の入った設定ファイルの居場所は、そこだからです。

[テキスト差分を開く](https://abox.tools/ja/text-diff/): 2つのテキストを入れると、すべての違いが行単位・単語単位で印付きで出てきます。よそのサーバーに貼り付けるものは何もありません。

最終更新 2026年8月26日

## 短い答え

1. [JSONフォーマッター](https://abox.tools/ja/json-formatter/)を開き、1つ目のファイルを貼り付け、インデントをスペース2つにして、*すべてのオブジェクトのキーを並べ替える*にチェックを入れます。結果をコピーします。
2. [テキスト差分](https://abox.tools/ja/text-diff/)を開き、左側の枠に貼り付けます。
3. 2つ目のファイルにも同じことをして、右側の枠へ。

いま光るものは本物です。変わった値、現れたキー、消えた項目。ふつうの差分を溺れさせたはずの整形の違いと並び替わったキーは消えています。比較が始まる前に、両側が同じつづりで書かれていたからです。

どちらのページにもネットワーク機能はいっさいありません。知っておく値打ちがあります。人が比較するJSONは、あまりにも多くの場合、資格情報がまだ中に残った設定ファイルだからです。

## 生のJSON差分がほとんどノイズである理由

JSONは空白を気にせず、キーの順序に意味を与えません。同じ文書が1行にも400行にもなり、キーは打った順にも、どこかのライブラリが吐いた順にもなります。そして道具はどちらも勝手に書き換えます。片側はミニファイ、片側は展開。片側は手で保存、もう片側はアルファベット順に並べるシリアライザーで。行の差分には、赤の他人の2ファイルに見えます。

最悪の2つの場合が要点を示します。**ミニファイされた**ファイルは1行なので、それに対する差分は巨大な変更行が1つ。正しくて、役に立ちません。そして**同じ内容が別の順序**の2ファイルは全部変更として比較されますが、正直な答えは「何も」のはずです。

![比較のオプション。左右に並べるか一列にするかの表示、変更行だけを出すスイッチ、空白・大文字小文字・空行を無視するスイッチ。](https://abox.tools/screens/compare-two-json-files/options.webp)

片方のファイルが違う改行で保存されていただけで全行が違うと言い出す、あの事態を防ぐのがこれらです。

## フォーマッターの正規形が直すもの

両方のファイルを同じ設定の同じフォーマッターに通すことこそ、差分に必要なものです。文書ごとに、つづりは1つ。

- **同じインデント**が各キーを自分の行に置きます。差分は行単位で働けるようになり、その単語マークは、行の中で変わったただ1つの値を指せます。
- **並べ替えたキー**が両側を同じ順序に置き、順序は違いであることをやめます。並びはコードポイントではなくキーの読まれ方に従い—`item2`が`item10`より前——両側に同一に適用されます。
- **ほかには何も動きません。**このフォーマッターは数を打ったとおりの桁のまま保ち、重複キーも裁かずに保ちます。正規化それ自体が違いをでっち上げることはできないということです。[フォーマッターのガイド](https://abox.tools/ja/guides/format-json-without-uploading-it/)が、それが本来あるべきより珍しい理由を説明しています。

正直な但し書きをひとつ。並べ替えた出力は、キーの動いた文書です。下流の道具がキーの順序を気にするなら——少数ですが存在します——並べ替えた写しは比較される対象として扱い、原本の置き換えにはしないでください。

## 結果を読む、そして持ち帰る

差分は消えた行を左に、増えた行を右に印し、変わった行の中では異なる単語を強調します。正規形の上なら、それはたいてい`false`から`true`へ動いたただ1つの値です。変わらなかった真ん中は数に畳まれ、2000行の設定に3か所の手直しなら、短い3つの節として読めます。

ダウンロードは統合形式のパッチ、`.patch`です。コードレビューの理解するフォーマットで、正規形を記述します。それはたいてい、レビューがどのみち欲しいものです。再整形ぬきの、変更だけ。

同じ手順は、2つのページが話せるほかのすべてにも効きます。YAMLもXMLも同じやり方で正規形になりますし、出どころの違う同じ形の2ファイルには、差分の無視スイッチ——空白、大文字小文字、空行——が同じ発想の軽い版です。

![JSON設定の二つの版を左右に並べ、変わった行に印がついています。バージョン番号、再試行回数、追加された機能、追加されたリージョン。](https://abox.tools/screens/compare-two-json-files/diff.webp)

本当の違いが4か所、それ以外は何も報告されていません。読むのは簡単なほうで、仕事をしたのは上の設定です。

## これを毎週やるなら

2回整形して、2回貼り付ける。手順が2つのページに住んでいるのは、各ページが1つの仕事をし、それぞれが単独で、貼り付けたものが何ひとつどこへも行かなかったことを証明できるからです。しかし両方ともオープンソースです。MITライセンス、依存なしのESモジュール——フォーマッターのパーサーはキーの順序と桁を守り、差分はMyersのアルゴリズム——それぞれに、説明するREADMEが付いています。

これが日々の一部なら、コーディングエージェントを[リポジトリ](https://github.com/A-Box-of-Tools/website)に向けて、比較しながら正規形にする2枠のページを頼んでください。`parseJson`と`printJson`と`compareText`は、importの3行先です。モジュールは読まれるために書かれていて、持ち出すことこそライセンスの目的です。
