Skip to content

JSON Diff(差分)

2つのJSONファイルをブラウザで即座に比較・差分確認。サイドバイサイドのハイライト表示、RFC 6902 JSON Patch出力、タイムスタンプやIDなどのノイズフィールドを無視。100%プライベート、アップロード不要。

トラッキングなし ブラウザで動作 無料
Ignoreパス:
詳細オプション
配列モード
Reviewed for RFC 6902/6901 compliance and edge cases including null vs missing keys, type drift, floating-point precision, and array key alignment. — Go Tools API Tooling Team · May 4, 2026

JSON Diffとは?

JSON DiffはJSONのデータモデルに従った2つのJSONドキュメントの構造比較です — キーは順序なし、型は厳格、配列は順序付きまたはキー付きです。テキスト差分(行を比較し、キーの並び替えや空白を差分として報告する)とは異なり、JSON差分は意味的に意味のある結果を生成します。

正規のマシン可読形式はJSON Patch(RFC 6902)で、1つのドキュメントを別のドキュメントに変換する順序付きopsアレイ(add、remove、replace、move、copy、test)です。パスはJSON Pointer(RFC 6901)を使用します。密接に関連するもの:JSON Merge Patch(RFC 7396)— よりシンプルですが「キーを削除する」と「キーをnullに設定する」を区別できません。このツールはRFC 6902を出力します。

JavaScriptでのJSONの深い等価性は見た目より難しいです。JSON.stringify(a) === JSON.stringify(b)はキーの並び替えで失敗し、-0と0(どちらも"0"にstringify)で誤解を招きます。正しい差分は、キーセットのユニオンを使って両方のツリーを並行して走査し、「in」演算子でnullと欠損を区別し、数値の「等しい」が何を意味するか(デフォルトはObject.is、toleranceの場合はイプシロン)を決定する必要があります。

このツールはブラウザ内で完全に実行されます。入力はマシンから離れることはありません。APIレスポンス、内部スキーマ、独自設定に安全です。

隣接するJSONツールで作業しますか?JSONフォーマッターでフォーマット;JSON to YAMLYAML to JSONで変換できます。

// Two JSON documents that look different but are semantically equal
const a = '{"a":1,"b":2}';
const b = '{"b":2,"a":1}';

// Naive comparison — wrong
JSON.stringify(JSON.parse(a)) === JSON.stringify(JSON.parse(b));
// → false (key order differs)

// JSON Diff (this tool) — correct: key order is irrelevant
// → 0 differences

// JSON Patch (RFC 6902) for { "a": 1 } → { "a": 2 }
// [{ "op": "replace", "path": "/a", "value": 2 }]

主な機能

サイドバイサイド + JSON Patch

1つの差分から2つのビュー:レビュー用のビジュアルハイライト、自動化用のRFC 6902パッチ。

ノイズフィールドを無視

ワンクリックプリセットで /createdAt、/updatedAt、/*Id、/*At、requestId、traceId を除外。カスタム拡張JSON Pointerパターンもサポート。

キーで配列をマッチング

インデックスではなくidフィールドでオブジェクトの配列を比較 — K8sの環境変数、package-lockのエントリ、または論理的に順序なしのリストに対応。

デフォルトで型厳格

1 ≠ "1"。null ≠ 欠損。テストフィクスチャに入った瞬間にバックエンドのシリアライゼーションのずれを検出。

100%ブラウザベース

入力はマシンから離れません。JSONのアップロードなし、JSONのlocalStorage保存なし、貼り付けた内容のアナリティクスなし。

データではなく設定を共有

共有リンクはconfigのみをURLに書き込みます。JSONの入力はローカルに留まります。

APIレスポンスのリグレッション

{"user":{"id":1,"name":"Ada","createdAt":"2024-01-01"}}
{"user":{"id":1,"name":"Ada Lovelace","createdAt":"2024-02-02"}}

2つの変更(name と createdAt)があります。Ignoreパスに /user/createdAt を追加すると、名前の変更だけが残ります。

設定ファイル監査(キー順序の変更)

{"a":1,"b":2,"c":3}
{"c":3,"a":1,"b":2}

データは同じで、キーの順序が異なります。JSON Diffはキーの順序を意味的に無関係として扱うため、差分は空になります。

オブジェクトの配列(キーでのマッチング)

[{"id":1,"qty":3},{"id":2,"qty":5}]
[{"id":2,"qty":5},{"id":1,"qty":4}]

配列モードを「キーでマッチ」に切り替え、key=id を指定します。アライメントなしでは全要素が変更に見えますが、アライメントありではid=1のqtyのみが変更されます。

JSON Patch出力(RFC 6902)

{"items":[{"id":1,"price":29.99}]}
{"items":[{"id":1,"price":24.99}]}

JSON Patchタブに切り替えると [{"op":"replace","path":"/items/0/price","value":24.99}] が取得でき、fast-json-patch で適用できます。

使い方

  1. 1

    両方のJSONドキュメントを貼り付ける

    元の(左)と変更後の(右)JSONを貼り付けます。ライブ差分は入力中にレンダリングされます;大きな入力(200KB超)は手動の「Diff」ボタンに切り替わります。

  2. 2

    ノイズをフィルタリングする

    プリセット(Timestamps / IDs / Trace)をクリックするか、拡張JSON PointerパターンをIgnoreパスに貼り付けて不要なフィールドを除外します。

  3. 3

    必要なビューを選択する

    人間によるレビューにはサイドバイサイド、マシン適用可能なopsにはJSON Patch(RFC 6902)を使用します。チームメートに設定を送るには「共有リンク」を使用してください。

よくある差分の落とし穴

キー順序ノイズ(テキスト差分の症状)

差分ツールが {"a":1,"b":2} と {"b":2,"a":1} を異なるものとして報告する場合、JSONdiffではなく行差分を実行しています。JSONキーは順序なしです — このツールはキー順序を自動的に無視します。

✗ 誤り
diff a.json b.json   # text diff: 'everything changed'
✓ 正しい
JSON Diff (this tool): 0 differences

nullと欠損の混同

{"a":null} と {} は同じではありません。これらを同等として扱うと実際のバックエンドのバグを隠します。

✗ 誤り
{"a": null} == {}   # collapsed by some tools
✓ 正しい
{"a": null} ≠ {}     # type-strict diff

キーアライメントなしの配列順序

[{id:1},{id:2}] と [{id:2},{id:1}] は論理セットに対して「2つの変更」ではありません。Sequentialはそのように報告します;キーでマッチに切り替えてください。

✗ 誤り
Sequential diff: 4 modified
✓ 正しい
Match by key (id): 0 differences

型のずれ(数値 vs 文字列)

バックエンドはIDを一貫性なくシリアライズすることがあります — 42 vs "42"。このツールはこれらを「type」修正としてフラグを立て、早期にずれを発見できます。

✗ 誤り
{"id": 42} vs {"id": "42"}   # serialization bug
✓ 正しい
Diff reports 'modified (type)' with both values

浮動小数点精度

0.1 + 0.2 !== 0.3(IEEE 754)。tolerance=0(デフォルト)では、これはフラグが立てられます。数値的等価を意図する場合は tolerance を 1e-9 に設定してください。

✗ 誤り
tolerance=0:  0.30000000000000004 ≠ 0.3
✓ 正しい
tolerance=1e-9: equal

タイムスタンプとUUIDのノイズ

createdAt、updatedAt、requestId、traceIdはリクエストごとに変化します。Ignoreパスのプリセットを使って除外してください。

✗ 誤り
Diff: 47 modifications (45 are timestamps)
✓ 正しい
Add /createdAt, /updatedAt, /requestId to Ignore paths → 2 real changes

一般的な使用例

APIレスポンスのリグレッション
ステージングと本番のレスポンスを比較;タイムスタンプとリクエストIDを無視して意味のあるペイロード変更のみを表示。
CIスナップショットテストの失敗
失敗したJest/Vitestスナップショットから実際と期待を貼り付け。ノイズをフィルタリングして数秒で本当の変更を発見。
package-lock / yarn.lockの競合
依存関係をnameでアライメントしてマージ競合を解決;キーの順序と無関係なフィールドがノイズになりません。
K8s / Helmのバリュー監査
envs、volumeMounts、portsをnameでマッチング。意図しない順序変更と実際のconfig編集を検出。
i18n翻訳カバレッジ
en.jsonとzh.jsonを構造的にdiffして、値ノイズなしで欠損または余分な翻訳キーを検出。
Terraform / CDKプランのレビュー
実行間でプラン出力を比較;数値toleranceで浮動小数点演算を処理し、ignoreパスでARNとタイムスタンプを除外。

技術的な詳細

RFC 6902準拠のパッチ出力
RFC 6901パスを使った有効なJSON Patch ops(add/remove/replace)を生成。fast-json-patch@3.xとrfc6902 npmパッケージに対して検証済み。
反復トラバーサル
明示的スタックトラバーサル(再帰なし)で100,000ノードと深度64を上限とし、敵対的な入力でのスタックオーバーフローを防止。
Object.is数値等価性
デフォルトの数値toleranceは0 — Object.isを使用するため-0と+0は区別されます。イプシロンベースの等価性にはtolerance > 0を設定してください。

ベストプラクティス

レビュー前にフィルタリング
まずIgnoreパスを追加し(タイムスタンプ、ID、トレースフィールド)、その後差分を確認。ノイズの多い差分のレビューは、目を訓練して本当の変更を見逃させます。
論理セットにはキーマッチング
配列が順序なしセット(envs、ユーザー、依存関係)を表している場合は、キーでマッチングを使用。論理セットのSequential差分はほぼ常に間違っています。
データではなく共有リンク
フィルタ設定を同僚に送るには共有リンクを使用 — 機密JSONを共有ドキュメントに貼り付けないでください。URLにはconfigのみが含まれます。

よくある質問

1フィールドしか変更していないのに差分ですべてが変更されたように表示されるのはなぜ?
よくある原因が3つあります:(1) キーの順序が異なる — JSON Diffはキー順序を同等として扱いますが、テキスト差分ツールはそうではない;(2) リクエストごとに変化するタイムスタンプ/UUID/自動ID — Ignoreパスに追加してください;(3) 配列の順序、インデックスによる比較が適切でない場合 — 配列モードを「キーでマッチ」に切り替えてください。
JSON差分でタイムスタンプとIDを無視するには?
上部のIgnoreパス入力欄を使用します。「Timestamps」または「IDs」プリセットをクリックすると /createdAt、/updatedAt、/*Id、/*At、/requestId をワンクリックでフィルタリングできます。高度なフィルタリングのために、拡張JSON Pointerパターンを1行に1つずつ貼り付けることもできます。
JSON Patchとビジュアル差分の違いは何ですか?
ビジュアル(サイドバイサイド)差分は人間向け — 目で変更を確認します。JSON Patch(RFC 6902)はマシン向け — fast-json-patch や rfc6902 npmパッケージで適用できる構造化されたopsアレイ(add/remove/replace)です。同じ差分、2つの出力形式です。
JSON差分はnullと欠損キーを同じものとして扱いますか?
いいえ。{"a":null} と {} は異なります — 前者は明示的なnullを持ち、後者はキーがありません。実際のシステムは両者で異なる動作をします;このツールはそれらを区別します。
配列はインデックスとキーのどちらで比較されますか?
デフォルトではインデックス(Sequential)です。「キーでマッチ」に切り替えてキーフィールド(通常はid)を指定すると、順序に関係なく要素をアライメントできます。K8sの環境変数、package-lockのエントリ、または論理的にセットとして扱うリストに使用してください。
差分をRFC 6902 JSON Patchとしてエクスポートできますか?
はい。JSON Patchタブは有効なRFC 6902 opsアレイを出力します。Ignoreパスが設定されている場合、パッチはフィルタリングされ(タブに「(filtered: excludes N ignored paths)」と表示)、元のドキュメントを完全に再現できません。完全なパッチにはIgnoreパスをクリアしてください。
JSON PatchはJSON Merge Patch(RFC 7396)と同じですか?
いいえ。RFC 6902(JSON Patch)は順序付きopsアレイで、明示的かつ可逆です。RFC 7396(Merge Patch)は単一のマージドキュメントで、シンプルですがnullの設定と削除を区別できません。JSON DiffはRFC 6902を出力します。
大きなJSONファイル(10MB超)を比較するには?
5MB程度を超えるファイルは実用的なブラウザメモリを超えます。ライブモードは200KBで無効になります;マルチメガバイトのファイルには、コマンドラインのjqまたはNodeのfast-json-patchを使用してください。
このツールはJSONをサーバーに送信しますか?
いいえ。すべての比較はブラウザ内でローカルに実行されます。入力はディスク、ネットワーク、localStorage、またはURLパラメータには書き込まれません。ページを更新すると消去されます。「共有リンク」ボタンはconfig(配列モード、Ignoreパス)のみを書き込み — データは含まれません。
差分で42と"42"が異なるのはなぜ?
JSON Diffは型厳格です:数値の42と文字列の"42"は同じではありません。これはバックエンドのシリアライゼーションのずれ(一部のエンドポイントは数値IDを返し、他は文字列を返す)を検出します — 差分はそれを「type」修正とラベル付けします。
コメント付きJSON(JSONC)やトレイリングカンマ付きJSONをdiffできますか?
標準JSON(RFC 8259)はコメントやトレイリングカンマを許可しません。このツールはネイティブのJSON.parseを使用しており、両方を拒否します。まず JSONフォーマッター を使ってコメントを削除してください。
idのようなキーでネストされたオブジェクト配列を比較するには?
配列モードを「キーでマッチ」に設定してidを入力します。差分はid値でアライメントします。v1は同じキーフィールドをすべての配列深度に適用します;そのフィールドがない内部配列はSequentialにフォールバックし、警告チップを出力します。
差分は浮動小数点精度(0.1 + 0.2)を処理しますか?
はい、Numeric toleranceで対応します。デフォルトはObject.isで0です — -0と+0は区別されます。小さなイプシロン(例: 1e-9)にtoleranceを設定すると、0.1 + 0.2は0.3と等しいと比較されます。Toleranceは数値リーフにのみ適用されます。

Base64エンコーダー&デコーダー

エンコーディングとフォーマット

Base64のデコード・エンコードが無料でオンラインで行えます。リアルタイム変換、UTF-8・絵文字対応。100%ブラウザ上で動作しデータは外部に送信されません。登録不要。

JSONフォーマッター&バリデーター

エンコーディングとフォーマット

無料オンラインJSON整形ツール。ブラウザ上でJSONのフォーマット、構文検証、圧縮を即座に実行。エラー検出、ワンクリックコピー対応。データは端末外に送信されず、100%プライバシー保護。

JSON to YAML コンバーター

エンコーディングとフォーマット

JSONを貼り付けるだけで即座にYAMLを取得。ブラウザ内でリアルタイム変換。K8s・Compose対応、2/4スペースインデント、Norway問題対応自動クォート。100%プライベート、データは送信されません。

URLエンコーダー&デコーダー — URL構造パーサー内蔵

エンコーディングとフォーマット

URLを貼り付けるだけで即座にエンコード・デコード。内蔵URLパーサーがプロトコル・ホスト・パス・クエリパラメータを編集可能なフィールドに分解。encodeURIとencodeURIComponentの2モード対応。完全ブラウザ動作でデータ送信なし。

YAML to JSON コンバーター

エンコーディングとフォーマット

YAMLを貼り付けるだけで即座にJSONを取得。ブラウザ内でリアルタイム変換。K8sマニフェスト・OpenAPI仕様・Helm valuesに対応。100%プライベート、データは送信されません。

進数変換ツール — 2進数・16進数・10進数・8進数

単位変換

無料オンライン進数変換ツール。2進数、8進数、10進数、16進数および任意の基数(2-36)間で数値を瞬時に変換。BigInt対応で桁数制限なし。登録不要・サーバー送信なし、すべての処理がブラウザ内で完結。コピーボタンやコードリテラル出力で開発作業を効率化。