すべての記事

JSON Repair:なぜJSONは壊れるのか、どう直すのか

「壊れた」JSONはよくある問題です。ファイルはほぼ正しく見えるのに、パーサーが読み込みを拒否します。日本語入力環境ならではの原因として、全角文字の混入がよく見られます。

無効なJSONのよくある原因

  • 閉じ括弧の前の余分なカンマ{"a": 1,} — JavaScriptでは許容されますが、厳密なJSONパーサーでは許容されません。
  • ダブルクォートの代わりのシングルクォート — JavaScriptのオブジェクトリテラルからコピーする際によくあるミスです。
  • クォートなしのキー{"name": "太郎"}の代わりに{name: "太郎"}
  • コメント — JSON5やJSONCと違い、JSONの仕様ではコメントがまったく許可されていません。
  • 途中で切れた出力 — APIのレスポンスやログファイルが途中で切れると、ドキュメントが閉じられないまま残ります。

全角カンマ・全角引用符という日本語特有の落とし穴

日本語IMEで変換中にキーを押し間違えたり、Wordや一太郎からテキストをコピーしたりすると、半角のカンマ・コロン・引用符のつもりが全角の「、」「:」「”」に置き換わっていることがある。見た目にはほぼ区別がつかないが、JSONの構文はASCIIの半角記号だけを認識するため、{"name": "太郎"、"age": 25}のような文字列はパーサーにとって記号の位置がまったく合わない壊れたJSONになる。修復ツールは全角記号を検出して半角に置き換えられる場合もあるが、全角文字列の中身(値そのもの)まで自動で判別するわけではない。

自動修復の仕組み

JSON修復ツールはヒューリスティックを適用します。欠けているクォートを追加し、余分なカンマを取り除き、文脈に基づいて閉じられていない括弧を閉じます。これは典型的でよくあるミスにはうまく機能しますが、魔法ではありません — データがより深刻に壊れている場合、どんな値が意図されていたかをツールが推測することはできません。

できることの限界

自動修復が直すのは構文であって意味ではありません。フィールドがまるごと欠けていたり、値が論理的に間違っていたりする場合、ツールはそれを検出できません — 結果はやはり手動での確認が必要です。特に全角文字が混入したテキストをコピーした場合は注意が必要です。

修復が曖昧になる場合

一部の破損には、同じくらいもっともらしい修正候補が複数存在します。途中で途切れた文字列{"a": 1, "b": 2は単純に括弧を閉じることで修復できますが、実際にはもう1つフィールドがあったなら、データが失われてしまいます。修復のヒューリスティックは「もっとも破壊的でない」推測を行いますが、これはあくまで推測であり、保証ではありません。

ツールを試す