JSONの構文エラーと直し方|症状から原因を特定
まず、ここに貼ってください
エラーメッセージを読んでも原因がわからないなら、JSON Formatterに貼って「検証のみ」をクリック。行番号と列番号が表示され、該当行がハイライトされる。
厄介なのは、エラーメッセージが指す行と実際の原因が違う場所にあるケース。閉じ忘れや末尾カンマは、エラーが出る行より前に原因があることが多い。だからこそ、まず全体を検証ツールに通すのが早い。
以下は症状別の原因と修正方法。エラー箇所が特定できたら、該当するセクションを見てください。
症状別:エラー原因と直し方
「最後のカンマで怒られる」
{
"a": 1,
"b": 2, ← ここ
}
原因: 末尾カンマ(trailing comma)
JavaScriptでは許容されるが、JSONでは禁止。最後の要素のカンマを削除する。
{
"a": 1,
"b": 2
}
これが一番多い。エディタの自動整形に任せていると、気づかず混入することがある。
→ 削除したらJSON Formatterで再検証。他にエラーがなければ完了。
「コメントを書いたら壊れた」
{
// 設定値 ← ここ
"key": "value"
}
原因: 標準JSONにコメントは存在しない
VSCodeの設定ファイルで動いていたのは、JSONC(JSON with Comments)として処理されていたから。APIに送ったり JSON.parse() に渡すと壊れる。
対処法:
- コメントを手動で削除する
- または JSON Formatter の「コメント除去」をONにして変換
→ 変換したら再検証。なぜJSONCが問題になるのかはJSONとJSONCの違いで解説。
「シングルクォートでエラー」
{
'key': 'value' ← ここ
}
原因: JSONはダブルクォートのみ
シングルクォートはJavaScriptの書き方。JSONでは使えない。
{
"key": "value"
}
エディタの置換機能で ' → " を一括変換するのが早い。ただし、値の中にアポストロフィがある場合は巻き込まないよう注意。
→ 置換したらJSON Formatterで再検証。
「キーにクォートを付けなかったらエラー」
{
key: "value" ← ここ
}
原因: JSONではキーのクォートは必須
JavaScriptオブジェクトでは省略できるが、JSONでは必ずダブルクォートで囲む。
{
"key": "value"
}
ブラウザのコンソールからコピペしたときに起きやすい。コンソールで動いたからといって、JSONとして有効とは限らない。
→ 修正したら再検証。JSオブジェクトとの違いはこちら。
「文字列に改行を入れたらエラー」
{
"text": "1行目
2行目" ← ここ
}
原因: 文字列内に直接改行は入れられない
エスケープシーケンス \n を使う。
{
"text": "1行目\n2行目"
}
同様に、タブは \t、バックスラッシュは \\。
複数行のテキストをJSONに入れるときは、エディタで改行を \n に置換してから貼り付ける。
→ 修正したらJSON Formatterで再検証。
「ダブルクォートを含む文字列でエラー」
{
"message": "He said "Hello"" ← ここ
}
原因: エスケープ漏れ
文字列内にダブルクォートを含める場合は \" でエスケープ。
{
"message": "He said \"Hello\""
}
HTMLやSQLを含むJSONを手書きするときに起きやすい。
→ 修正したら再検証。
「数値の書き方でエラー」
{
"price": .5, ← 先頭ゼロ省略はダメ
"count": 01, ← 先頭ゼロはダメ
"hex": 0xFF ← 16進数はダメ
}
原因: JSONの数値は10進数のみ、省略記法は不可
{
"price": 0.5,
"count": 1,
"hex": 255
}
他の言語から持ってきたデータで起きることがある。
→ 修正したら再検証。
「undefinedやNaNを入れたらエラー」
{
"value": undefined, ← ダメ
"result": NaN, ← ダメ
"max": Infinity ← ダメ
}
原因: JSONで使えるのは null のみ
undefined、NaN、Infinity はJavaScriptの値であり、JSONには存在しない。
{
"value": null,
"result": null,
"max": null
}
JSON.stringify() は NaN と Infinity を null に変換するが、手書きのときは自分で置き換える必要がある。
→ 修正したら再検証。JSとJSONの違いはこちら。
エラーメッセージ別:原因早見表
| エラーメッセージ | よくある原因 | 確認箇所 |
|---|---|---|
| Unexpected token | 末尾カンマ、コメント、不正な文字 | エラー行の直前 |
| Unexpected end of JSON | } や ] の閉じ忘れ | ファイル末尾付近 |
| Expected property name | キーのクォート忘れ | エラー行のキー |
| Expected ':' | キーと値の間のコロン忘れ | エラー行 |
| Expected ',' | 要素間のカンマ忘れ | エラー行の直前 |
まとめ:修正フロー
エラーが出た
↓
JSON Formatterに貼って「検証のみ」
↓
行番号を確認
↓
該当セクションの修正方法を適用
↓
再度「検証のみ」で確認
↓
エラーがなくなったら完了
→ JSON Formatterに戻る