JSON整形・検証:構文エラーの本当の原因

「JSONが壊れる」原因のほとんどは、ごく少数の構文ルールに違反しているだけであることが多いです。

キーは必ずダブルクォートの文字列

JSONではキーも文字列値も必ずダブルクォートで囲む必要があり、JavaScriptのオブジェクトリテラルと違ってシングルクォートやクォートなしのキーは正式には無効。

末尾カンマは許可されない

オブジェクトや配列の最後の要素の後にカンマを付けるとパースエラーになる、JSのコードをコピーした際に見落としがちな典型的ミス。

使える値の型は決まっている

文字列・数値・真偽値(true/false)・null・オブジェクト・配列のみで、undefinedや関数、コメントなどは無効。

整形と圧縮は同じデータの見せ方の違い

インデント付きの整形は人が読みやすく、圧縮(minify)は不要な空白を削って転送量を減らすためのもので、データ自体はどちらも同じ。

オブジェクトと配列は何重にもネストできる

APIレスポンスのような複雑な階層構造を表現できる理由。

なぜJSONはここまで構文に厳格なのか

シンプルで曖昧さのないデータ交換フォーマットとして設計されたため、パーサーによって解釈が変わらないことを保証する目的で意図的に厳格になっている。

JSONエラーが起こりやすい場面

手動編集した設定ファイル、JS/Pythonのコードからのコピペ(クォートのルールが違う)、末尾カンマ、//コメント(JSONでは不可)などが、エラーの大半を占める。

よくある質問

JSONにコメントは書けますか?

標準のJSONにはコメント構文はなく、JSON5やJSONCなど拡張形式を使わない限り//や/* */を書くと検証エラーになる。

JavaScriptでは動くのにJSONとしては無効と言われるのはなぜ?

JSのオブジェクトリテラルはクォートなしキーや末尾カンマなどを許容する緩い記法であり、それはJSの仕様であってJSONの仕様ではないため。