チュートリアル

JSONのよくあるエラー大全:原因・例・修正方法

引用符、カンマ、括弧、エスケープ、不正な値、重複キー、大きな整数など、よくあるJSONエラーを例と修正手順付きで解説します。

2026-07-1912分

JSONは単純に見えますが、引用符、カンマ、バックスラッシュが一つ違うだけで、文書全体を解析できなくなることがあります。パーサーが示すのは処理を続けられなくなった位置であり、実際に間違えた位置とは限りません。

このガイドでは、APIレスポンス、設定ファイル、ログでよく発生するJSONエラーを整理します。まず JSONバリデーター で最初のエラーを特定してください。JSONに近い形式なら JSON修復ツール で修正候補を作り、変更内容を確認します。処理はすべてブラウザー内で行われます。

基本原則:元の入力を保存し、最初のエラーから一つずつ直して、そのたびに再検証します。

1. 入力が標準JSONか確認する

JSONで使えるのは、オブジェクト、配列、文字列、数値、真偽値、null です。キーと文字列はダブルクォートで囲みます。コメント、undefinedNaN、関数、日付オブジェクトはJSONではありません。

症状主な原因最初に確認する場所
Unexpected token不正な文字、シングルクォート、引用符のないキー表示位置付近の引用符
Unexpected end of JSON input閉じ記号の不足、入力の途中切れファイルやレスポンスの末尾
Expected ',' or '}'プロパティ間のカンマ不足直前の値の末尾
Bad control character文字列内の未エスケープ改行やタブバックスラッシュと制御文字
解析できるが値が変わる重複キー、大きすぎる整数型とデータの意味

2. キーや文字列の引用符が正しくない

JavaScriptオブジェクトではシングルクォートや引用符のないキーを使えますが、標準JSONでは使えません。

{ name: 'Alice', 'role': 'admin' }

正しいJSON:

{ "name": "Alice", "role": "admin" }

文書内のシングルクォートをすべて一括置換しないでください。文字列中のアポストロフィやエスケープまで壊す可能性があります。

3. 値の間にカンマがない

{
  "name": "Alice"
  "active": true
}

直前の値の末尾にカンマを追加します。

{
  "name": "Alice",
  "active": true
}

Expected ',' が出たら、表示された文字だけでなく、その直前の完全な値を確認します。配列要素でも同じ規則です。

4. 末尾に余分なカンマがある

標準JSONでは、最後のプロパティや配列要素の後にカンマを置けません。

{
  "name": "Alice",
  "active": true,
}

true の後のカンマを削除し、JSON整形ツール で再解析すると、構文とインデントを同時に確認できます。

5. 閉じ括弧や終了引用符が足りない

Unexpected end of JSON input は、オブジェクト、配列、文字列が閉じる前に入力が終わったことを示します。ネットワークレスポンスやコピーしたログが途中で切れている場合もあります。

{
  "user": {
    "name": "Alice",
    "tags": ["admin", "editor"]
}

この例では外側の } が不足しています。ただしAPIデータの場合、すぐに括弧を補わず、レスポンス全体が届いたか確認してください。ツールは構文を閉じられても、失われたフィールドは復元できません。

6. 文字列のエスケープが不正

JSONでは、引用符、バックスラッシュ、改行、タブをそれぞれ \"\\\n\t と記述します。Windowsパスや正規表現は特に注意が必要です。

不正:

{
  "path": "C:\new\reports",
  "message": "He said "hello""
}

修正後:

{
  "path": "C:\\new\\reports",
  "message": "He said \"hello\""
}

文字列内に実際の改行を直接入れることもできません。必要なら \n を使います。

7. コメントが含まれている

標準JSONは ///* ... */ コメントをサポートしません。コメントを削除するか、必要な説明を明示的なフィールドに移します。単純な正規表現で // 以降を削除すると、https:// のURLまで壊すため危険です。

8. JSONに存在しない値を使っている

真偽値とnullは小文字の truefalsenull だけです。Pythonの TrueFalseNone、JavaScriptの undefinedNaNInfinity は無効です。

{ "active": True, "nickname": None, "score": NaN }

修正候補:

{ "active": true, "nickname": null, "score": null }

ただし NaNnull、文字列、フィールド削除のどれにするかは、業務仕様で決める必要があります。

9. 複数のオブジェクトが連結されている

ログでは、1行に1オブジェクトを置くNDJSON/JSON Linesがよく使われます。各行が正しくても、全文は一つのJSON文書ではありません。

{"id": 1, "status": "ok"}
{"id": 2, "status": "failed"}

標準JSONが必要なら、オブジェクト間にカンマを置いて配列にします。

[
  {"id": 1, "status": "ok"},
  {"id": 2, "status": "failed"}
]

10. JSONが二重にエンコードされている

解析結果がバックスラッシュだらけの長い文字列なら、データが二度シリアライズされた可能性があります。

"{\"name\":\"Alice\",\"active\":true}"

1回目の解析では文字列、2回目でオブジェクトになります。通常は生成側でシリアライズを1回に直しますが、JSON文字列を保存する契約かどうかも確認してください。

11. 重複キーは解析できても危険

{
  "role": "user",
  "role": "admin"
}

多くのパーサーは最後の値を残しますが、言語やセキュリティ層によって動作が異なる場合があります。入力時に重複キーを拒否し、生成側を修正してください。通常の JSON.parse の後では、上書きされた値はすでに失われています。

12. 大きな整数の精度が失われる

JavaScriptの Number9007199254740991 を超えるすべての整数を正確に表現できません。データベースIDなどが解析時に変わることがあります。

{ "userId": 9007199254740993 }

識別子は文字列で送る方が安全です。

{ "userId": "9007199254740993" }

すでに丸められた数値を後から文字列にしても、元の桁は復元できません。

13. 安全なトラブルシューティング手順

  1. 元のテキストを保存します。
  1. コピー、ログ、通信で途中切れしていないか確認します。
  1. JSONバリデーター で最初のエラーを探します。
  1. その位置より前の引用符、カンマ、括弧を確認します。
  1. 一つ直すたびに再検証します。
  1. JSON Diff で元データと修正候補を比較します。
  1. JSONツリービューアー で階層と型を確認します。
  1. 構文が通った後に、必須項目と業務ルールを検証します。

決済、権限、医療、監査、移行データを無人で自動修正しないでください。ツールは明確な構文エラーを直せますが、欠損値や業務上の意味は推測できません。

まとめ

JSONエラーの多くは、引用符、カンマ、括弧、エスケープ、非標準値が原因です。元データを残し、最初のエラーから一つずつ直して再検証します。解析後も、重複キー、大きな整数、型、意味を確認してください。JSONに近い入力は JSON修復ツール で候補を作り、JSONバリデーターJSON Diff で独立して確認できます。

Ene Chen

開発者に最高のJSON処理ツールを提供することに専念

関連投稿

さらに多くの投稿が近日公開予定...

ブログに戻る

関連ツール

よくある質問

更新の追い方、扱うトピック、リクエストについて。

新着記事を見逃さないには?

このブログ一覧をブックマークし、ホームやツール一覧のガイド欄もご覧ください。記事の閲覧に登録やメール購読は不要です。

どんな内容が中心ですか?

JSON の検証・整形・変換・デバッグの流れと JSON Work の更新で、サイト上の無料ツールがブラウザ内でできることと対応づけています。

チュートリアル題材の提案はできますか?

はい。About の連絡先や GitHub からどうぞ。実務の統合やデバッグに直結するテーマを優先しています。