両方のペインに JSON を貼り付けると比較できます。
ツール説明
JSON 構造差分チェッカーについて
JSON diff ツールは 2 つのドキュメントをテキストではなく構造として比較するため、書式ではなくデータのどこが変わったかが分かります。
片側に元の JSON を、もう片側に変更後の JSON を貼り付けると、比較結果がただちに更新され、追加・削除・変更された値とそれぞれのパスが表にまとまります。
JSON Diff ツールの使い方
- 1 つ目の入力欄に元のドキュメントを、2 つ目に変更後のドキュメントを貼り付けます。
- 上部に +N -N ~N の形式で表示されるサマリーの件数を見て、変更の規模を把握します。
- 結果テーブルを確認します。変更の種類、パス、変更前の値、変更後の値が並びます。
- a.b[2] のようなパスをたどって元のファイル内の該当箇所を特定します。キーはドットで連結され、配列はインデックスで表されます。
こんなときに使えます
- ステージング環境と本番環境の JSON 設定など、2 つの環境の設定を比較する。
- サービスの 2 つのバージョン間で API レスポンスがどう変わったかを、新しい構造に依存する前に確認する。
- package-lock.json などの生成された依存関係マニフェストの中で、実際に何が動いたかを調べる。
- Infrastructure as Code のファイルや Kubernetes マニフェストをツールが再シリアライズした後、何が書き換わったかを確認する。
パスと変更種別の表記
各行はドキュメント内の 1 箇所を指し示します。コード上でその値を参照するときと同じ書き方なので、元ファイルの中で見つけやすくなっています。
- 追加: そのパスは変更後のドキュメントにのみ存在し、変更後の値の列に新しい値が表示されます。
- 削除: そのパスは元のドキュメントにのみ存在し、変更前の値の列に元々あった値が表示されます。
- 変更: そのパスは両側に存在し値が異なるため、両方の列が埋まります。
- a.b[2] のようなパスは、オブジェクト a の中のキー b、さらにその配列のインデックス 2 の要素という意味です。
JSON 差分のよくある質問
- ファイルを整形し直しても差分が出ないのはなぜですか
- 両側とも先に解析されるためです。インデントやキーの順序、改行コードは解析後の構造には含まれないため、差分として現れることはありません。
- 配列に要素を 1 つ挿入すると、それ以降すべてが変更扱いになるのはなぜですか
- 配列はインデックスで比較されます。挿入によって後続の要素がすべて 1 つずつずれるため、ずれた位置がそれぞれ変更として報告されます。これは位置ベースの比較に本質的な性質であり、不具合ではありません。
- 片側が正しい JSON でない場合はどうなりますか
- 両方の入力が正しく解析できる必要があります。どちらかが不正な場合は、比較結果の代わりに解析エラーが表示されます。
- 2 つのドキュメントが一致している場合は何が表示されますか
- 構造上の差分がないことを明示的に表示します。空の結果のままにして失敗と誤解されることを避けるためです。
- 入力したデータはどこかにアップロードされますか
- いいえ。解析と比較は microdiff ライブラリーを使ってブラウザー内でローカルに実行されるため、貼り付けた内容が wetool.site や他のサーバーに送られることはありません。
JSON の差分とテキスト差分
テキスト差分は文字の行を比較するため、キーの並べ替えや 2 スペースから 4 スペースへの変更、改行コードの違いまでもが、データとしては同一であっても差分として現れ、本当の変更がそのノイズに埋もれてしまいます。JSON diff は両方のドキュメントを先に解析し、意味上の差分だけを報告するため、キーの順序や書式は無視されます。バイト列そのものが重要なときはテキスト差分を、データだけが重要なときはこのページを使ってください。
結果を誤読しないための読み方
構造比較は狭い問いに正確に答えるものなので、この表が何を語り何を語らないかを知っておくと役立ちます。
- 1 つの配列に変更が集中している場合、多くは独立した多数の編集ではなく、1 回の挿入か並べ替えを示しています。
- 型は区別されます。文字列の 1 と数値の 1 は異なる値であり、変更として報告されます。