JSON パースエラー: よくある 10 の失敗と直し方
2024-09-12
API レスポンスや設定ファイルは、たった 1 行の構文ミスで失敗します。この記事では 10 個の典型的なミスを、壊れた例・原因・修正済み JSON とあわせて整理し、オンラインツールで該当行を見つける方法も紹介します。
1. キーや文字列をシングルクォートで書く
JSON ではキー名と文字列値にダブルクォートが必須です。JavaScript のオブジェクトリテラルはシングルクォートを許可しますが、JSON では不可です。
代表的なエラー: Unexpected token ' in JSON at position …
{
name: "Alice",
"age": 30
}{
"name": "Alice",
"age": 30
}2. 末尾カンマ
最後のプロパティや配列要素の後ろにカンマは置けません。エディタが自動で末尾カンマを入れると、厳密な JSON パーサーで失敗します。
JavaScript リテラル(ES2019+)では末尾カンマを許可しますが、JSON 仕様(RFC 8259)では常に禁止です。
{
"items": [1, 2, 3,],
"tags": ["a", "b",]
}{
"items": [1, 2, 3],
"tags": ["a", "b"]
}3. キー名をクォートしていない
すべてのキーはダブルクォート付き文字列である必要があります。{ active: true } は JSON では無効です。
{
active: true,
"score": 95
}4. カンマ不足または余分なカンマ
隣接するキーと値のペアにはカンマが必要です。重複カンマは Unexpected token エラーの原因になります。
{
"a": 1
"b": 2
}{
"a": 1,, "b": 2
}5. 不正なエスケープシーケンス
パス内のバックスラッシュは 2 重にする必要があります(\ は \\)。単独のバックスラッシュは Bad escaped character を引き起こします。
{ "path": "C:\Users\data" }{ "path": "C:\\Users\\data" }6. NaN / Infinity / undefined
JSON で空値として使えるのは null のみで、NaN や undefined など JavaScript 固有値は使えません。
{ "value": NaN }7. コメント
JSON には // や /* */ コメントはありません。パース前に必ず削除してください。
ドキュメント例、VS Code の JSONC、JSON5 はコメントを許可しますが、JSON.parse には入力できません。データ交換では厳密な JSON を使いましょう。
{
// user profile
"name": "Bob"
}8. ルート値が複数ある / 括弧が閉じていない
有効な JSON のルートは 1 つのオブジェクトまたは 1 つの配列です。} や ] の閉じ忘れは Unexpected end of JSON input につながります。
9. 不正な数値形式
先頭ゼロ(007)、16 進(0xFF)、小数点単体は使えません。
10. エスケープされていない制御文字
文字列内の改行やタブは実文字ではなく \n、\t で表現します。ログ由来の生改行をそのまま入れると失敗します。
オンラインで試す
JSON ツールにテキストを貼り付けると、失敗時にサイドバーへエラーメッセージと行番号が表示され、エディタがその行をハイライトします。
修正後に再度フォーマットまたはミニファイして、成功バナーが出れば JSON は有効です。