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 は有効です。