JSON差分の読み方:キー欠落・null・0・型変更を6件の例で区別する
要点
- 消えたキーとnullを分けます。 数値0、false、空文字も「未設定」へ変換しません。
- 比較条件は同じ場所です。 キー順は無視し、配列は同じ添字で比べます。
- サンプルの期待結果は6件。 追加1・削除2・型変更2・値変更1を確認できます。
保存したAPI応答や設定のJSONで、どの項目が変わったかを確認したい人向けの記事です。JSON差分比較ツールへ変更前と変更後を貼り付けると、キーの追加・削除、型変更、値変更を表にできます。入力や結果の保存・送信、APIへの接続はありません。以下は学習用に作った架空のJSONで、現在の天気予報や企業開示を取得したものではありません。
最初に6件のJSON差分を確かめる
ツールで「架空の比較サンプルを入れる」→「2つのJSONを比較する」と進んでください。左が変更前、右が変更後です。
変更前:
{"count":0,"optional":null,"removed":"old","record":{"score":"0","active":false},"list":[1,2]}変更後:
{"count":null,"added":0,"record":{"score":0,"active":false},"list":[1,3]}| 場所 | 変更前 | 変更後 | 期待する分類 |
|---|---|---|---|
/added | キーなし | 数値 0 | 追加 |
/count | 数値 0 | null | 型変更 |
/list/1 | 数値 2 | 数値 3 | 値変更 |
/optional | null | キーなし | 削除 |
/record/score | 文字列 "0" | 数値 0 | 型変更 |
/removed | 文字列 "old" | キーなし | 削除 |
record.activeは両方ともfalseなので表示されません。countとoptionalは、画面上ではどちらも空に見せることがあります。しかし、前者は値の型が変わり、後者はキーが消えています。受け取り側の処理を直すときは、同じ「空」として片付けず、許容する状態を決めます。
JSONが使う値の分類は、RFC 8259の3章に基づきます。nullはJSONの値ですが、キーが存在しない状態は値ではありません。 どちらが正しいかをツールが決めることはできません。
配列は位置で比較する。IDで同じ記録とは判断しない
[{"id":"A"},{"id":"B"}]と[{"id":"B"},{"id":"A"}]を比べると、/0/idと/1/idの2件が変わったと表示します。データが増えたと判断したわけではありません。配列は順序を持つ一方、オブジェクトのキー順は比較から外します。RFC 8259の4・5章で、この違いを確認できます。
比較前に、次を確かめてください。
- 取得条件と対象日が同じか。今回だけ絞り込みやページ送りが変わっていないか。
- 順番に意味がある配列か。気象庁の
timeDefinesと値の対応は、勝手に並べ替えない。 - 同じ記録を比較する必要があるか。EDINETのdocIDなど、安定した識別子で手元のデータを揃える。
ツールにIDで揃える機能はありません。位置の差を、訂正書類の発生や天気の変化へ直接読み替えないでください。本文ステータスや閲覧フラグを先に確認する場合は、気象庁・EDINETのJSON確認ツールが別の役割を持ちます。
場所の表記はJSON Pointer
/record/scoreはrecordの中のscore、/list/1は配列の2番目を指します。キーに/が含まれる場合は~1、~が含まれる場合は~0に置き換えます。たとえばキーa/bは/a~1b、キーm~nは/m~0nです。これはRFC 6901の3・4章の表記です。
空のPointerは文書全体を指すため、ツールでは「文書全体・空のPointer」と表示します。/だけの場合は空文字のキーです。この2つを混同しません。Pointerを別のAPIへ送る機能やJSON Patchの作成機能はありません。
差分の上限に達したら、同じ範囲を抜き出す
入力は片側50万文字、入れ子32段、値2万個、配列1つ1000要素、キー128文字までです。差分が200件を超えると以降の比較を打ち切り、全件数は未確定と表示します。「200件だけ違う」「残りは同じ」とは判断できません。変更前後の同じ範囲を手元で抜き出して比較し直してください。
追加・削除された配列やオブジェクトは、その場所で1件です。中の項目を展開して数えません。長い値は160文字までのプレビューなので、表示が同じに見えても末尾の違いが省略されている場合があります。コピーされる記録もプレビューであり、元データの完全な保管や復元には使えません。
エラーのときは、元の入力や内部のエラー全文を解析イベントへ載せません。画面の固定された説明に沿って入力を直します。
| 止まる条件 | 次にすること |
|---|---|
| JSONの構文エラー | 両方の引用符、末尾のカンマ、コピー漏れを確認 |
| 同じオブジェクトの重複キー | 最後の値だけに任せず、生成元でキーを一意にする |
__proto__・prototype・constructorのキー | このツールでは処理せず、手元の実装で確認 |
| 巨大整数、無限大や0に丸められる数値 | 元データで識別子や正確な数値を文字列として扱う |
| 深さ・要素数・文字数の上限 | 変更前後の同じ範囲へ絞って再比較 |
数値はJavaScriptのNumberで比較します。安全な整数範囲を超える数は拒否しますが、細かい小数の精度を保証するツールではありません。MDNのJSON.parseの説明も、解析時に数値の精度を失う可能性を示しています。1と1.0や空白の差は比較しません。厳密な金額計算や原文のバイト一致は別の方法で確認してください。
比較できた後に確認すること
まずJSON差分比較ツールの架空サンプルで6件を確かめ、その後に自分で保存した同じ条件のJSONを比較します。入力を変えたら古い結果は消え、比較し直すまで再表示されません。差分がなくても、APIの成功・情報の鮮度・仕様適合を保証したことにはなりません。
気象庁の発表時刻と区域の確認は予報JSONの取得記事、EDINETの本文ステータスと取得条件はEDINET API v2ガイドへ進んでください。2026年10月2日の確認は、自作ツールの架空JSONとローカルテスト、上記一次資料の照合です。認証したAPIや実データによる変更検出、利用者の効果測定は行っていません。
この記事の情報・検証メモ
- json
- public-data
- edinet
- ai-agent
- 公開日
- 情報確認
- 参考リンク
- 3件
- 更新性
- 長く使える
仕様・料金・提供範囲が変わりやすいテーマは、公開日・更新日・情報確認日を分けて管理します。 導入前には必ず記事末尾の一次情報と公式ドキュメントで最新状況を確認してください。