JSONの構文エラー10パターンと修正方法
JSONがパースできない原因はほぼ10パターンに集約されます。RFC 8259とECMA-404の標準JSON仕様に基づき、よくある間違いと修正前後の例、JSON.parse()のエラーメッセージから原因を特定するコツを整理します。
パターン1〜3 引用符まわり
① シングルクォート:JSONはダブルクォート(")のみ。シングルクォート(')はエラーになります。
② キーのクォート忘れ:JavaScriptオブジェクトではキーの引用符を省略できますが、JSONでは必須です。
③ 引用符の閉じ忘れ:文字列の途中で改行が入ったり、終端の"が抜けるとエラー。エディタの構文ハイライトで色が変わったままになっているのが目印です。
パターン4〜5 カンマまわり
④ 末尾カンマ(trailing comma):配列やオブジェクトの最後の要素の後ろにカンマを置けません。
JavaScript・Python・YAML・JSON5は末尾カンマを許可するため、それらに慣れているとうっかり残します。配列でも同じです。
⑤ カンマの抜け:要素間にカンマがないと「Unexpected string」のようなエラー。複数行になっているとき特に見落としやすいです。
パターン6〜7 コメント・括弧
⑥ コメント混入:RFC 8259・ECMA-404は//や/* */を許可していません。設定ファイルにコメントを書きたい場合、JSONC(VS Codeのsettings.jsonなど)やYAMLが選択肢になります。
⑦ 括弧の閉じ忘れ・対応ミス:ネストが深いと{と}、[と]の対応がずれます。整形ツールでインデントをつけ、開きと閉じが同じ列に揃うか確認するのが早道。
パターン8〜9 値の型と表記
⑧ 値の表記ミス(true/false/null):JSONの真偽値とnullは全て小文字。True / False / NULL / NoneはNG。Python・SQLから機械的に変換すると引っかかりがちです。
⑨ 数値の頭ゼロ・小数点・無限大:「08」「.5」「1.」「Infinity」「NaN」はNG。「8」「0.5」「1.0」と書き、無限大やNaNは文字列"Infinity"として表現するか別のキーで分けます。
パターン10 エスケープミス
⑩ 文字列内のエスケープ漏れ:文字列の中にダブルクォート・バックスラッシュ・改行を入れるときは、それぞれ\"、\\、\nとエスケープが必要です。
Windowsのファイルパス C:\Users\name もNG。C:\\Users\\name と書く必要があります。バックスラッシュは必ず2個重ねる、と覚えてください。
JSON.parse()のエラーメッセージの読み解き方
ブラウザのJSON.parse()や本ツールが出すエラーメッセージにはおおむね位置情報が含まれます。代表的なパターン:
- ・「Unexpected token X at position N」: N文字目で予期しない文字Xを検出。直前の引用符・カンマ・括弧を疑う。
- ・「Unexpected end of JSON input」: 末尾の括弧・引用符が閉じていない。最後の構造体まで遡る。
- ・「Expected property name or }」: オブジェクトの中で、キーが来るべき場所にキーがない。末尾カンマか引用符抜けが疑い。
- ・「Unexpected non-whitespace character after JSON」: JSON本体の後に余計な文字。コピペで末尾に改行以外が混入。
本ツールはエラー位置を行・列に変換して表示します。エディタの該当行に飛んで、前後3行ほどを目視確認するのが最速です。
JSON整形・チェックツールはこちら → /json-format/
本記事はRFC 8259 (IETF Standards Track, 2017-12)、ECMA-404 2nd edition、json.org公式、MDN Web Docs JSON.parseを参照しています。