一般的なJSON構文エラーとバリデーターでの修正方法
一般的なJSONエラー
JSONの厳格な構文規則は、1文字でも誤って配置するとドキュメント全体が壊れることを意味します。最も一般的なJSONエラーを理解することで、より速くデバッグでき、同じ過ちを繰り返すことを避けられます。以下は、開発者が遭遇する最も頻繁な問題と、それぞれの明確な説明と修正方法です。
1. 末尾のカンマ
エラー: オブジェクトまたは配列の末尾のUnexpected token
末尾のカンマはJavaScriptのオブジェクトと配列では許可されていますが、JSONでは厳格に禁止されています。
無効なJSON:
{
"name": "Alice",
"age": 30,
}
修正: 最後のアイテムの後のカンマを削除します。
{
"name": "Alice",
"age": 30
}
末尾のカンマを持つ配列:
// Invalid
[1, 2, 3,]
// Valid
[1, 2, 3]
2. キーを囲む引用符の欠落または誤り
エラー: Unexpected identifierまたはExpected double-quoted property name
JSONでは、すべてのオブジェクトキーを二重引用符で囲む必要があります。一重引用符と引用符のないキーは、JavaScriptでは機能してもJSONでは有効ではありません。
無効なJSON:
{
name: "Alice",
'occupation': "Engineer"
}
修正: 常にキーを二重引用符で囲みます。
{
"name": "Alice",
"occupation": "Engineer"
}
3. 文字列値に一重引用符を使用する
エラー: Unexpected identifierまたはUnterminated string
キーと同様に、JSONでは文字列値にも二重引用符を使用する必要があります。一重引用符は有効ではありません。
無効なJSON:
{ "greeting": 'Hello, world!' }
修正: 一重引用符を二重引用符に置き換えます。
{ "greeting": "Hello, world!" }
ヒント: 文字列に二重引用符が含まれる場合は、バックスラッシュでエスケープします:"He said, \"Hello\""。
4. エスケープされていない特殊文字
エラー: Unexpected tokenまたはInvalid character
JSON文字列では特定の文字をエスケープする必要があります:二重引用符(")、バックスラッシュ(\)、および制御文字です。
無効なJSON:
{
"path": "C:\Users\Documents\file.json",
"quote": "He said "hello""
}
修正: バックスラッシュと二重引用符を適切にエスケープします。
{
"path": "C:\\Users\\Documents\\file.json",
"quote": "He said \"hello\""
}
JSONエスケープシーケンスの完全なリスト
| シーケンス | 意味 |
|----------|-----------|
| \" | 二重引用符 |
| \\ | バックスラッシュ |
| \/ | スラッシュ |
| \b | バックスペース |
| \f | フォームフィード |
| \n | 改行 |
| \r | キャリッジリターン |
| \t | タブ |
| \uXXXX | Unicode文字(例:eのé) |
5. 無効な数値形式
エラー: Unexpected numberまたはInvalid number
JSONには数値のフォーマットに関する特定の規則があります:
- 先頭のゼロは許可されません(
01は無効) - 単一の先頭ゼロは数値
0にのみ許可されます - 数値は末尾にドットを付けることはできません(
10.は無効) - 16進数、8進数、2進数の形式はサポートされません
無効なJSON:
{
"invalid1": 01,
"invalid2": 10.,
"invalid3": 0xFF,
"invalid4": 1,000
}
修正:
{
"valid1": 1,
"valid2": 10.0,
"valid3": 255,
"valid4": 1000
}
6. 無効な値:undefined、NaN、Infinity
エラー: undefined、NaN、Infinityに対するUnexpected token
JavaScriptにはJSONに相当するものがない値があります。これらはパースエラーを引き起こします:
無効なJSON:
{
"undefinedVal": undefined,
"notANumber": NaN,
"infinity": Infinity
}
修正: 有効なJSON値に置き換えるか、規約を使用します。
{
"undefinedVal": null,
"notANumber": null,
"infinity": 1.7976931348623157e+308
}
7. 余分なカンマまたは欠落したカンマ
エラー: Expected commaまたはUnexpected token
JSONではカンマはすべてのキー/値ペアと配列要素を区切る必要がありますが、最後のアイテムの後に付けてはなりません。
欠落したカンマ(無効):
{
"name": "Alice"
"age": 30
}
修正: 欠落しているカンマを追加します。
{
"name": "Alice",
"age": 30
}
8. 深くネストされた構造の問題
エラー: Maximum call stack size exceededまたはパーサーのタイムアウト
構文エラーではありませんが、深くネストされたJSON(10レベル以上)はパフォーマンスの問題を引き起こし、デバッグを非常に困難にする可能性があります。
問題のある構造:
{
"level1": {
"level2": {
"level3": {
"level4": {
"level5": {
"level6": {
"value": "too deep"
}
}
}
}
}
}
}
より良いアプローチ: 構造をフラット化するか、参照を使用します。
{
"users": {
"alice": { "role": "admin" }
},
"permissions": {
"admin": ["read", "write", "delete"]
}
}
9. 開始または終了の波括弧の欠落
エラー: Expected ',' or '}'またはUnexpected end of JSON input
一致しない波括弧と角括弧は、特に大きなファイルや手書きのJSONファイルで、JSONエラーの一般的な原因です。
無効なJSON:
{
"name": "Alice",
"items": [1, 2, 3
}
修正: すべての{に対応する}があり、すべての[に対応する]があることを確認します。
{
"name": "Alice",
"items": [1, 2, 3]
}
プロのヒント: 開きと閉じの括弧を視覚的に一致させるために、JSONを適切にインデントしてください。JSONフォーマッターがこれを自動的に行えます。
JSONエラーを効果的にデバッグする方法
- JSONバリデーターを使用する -- JSONを無料のJSONバリデーターに貼り付けて、最初のエラーの正確な行と列を取得します。
- 段階的に検証する -- 大きなファイルの場合、エラーを切り分けるためにセクションごとに検証します。
- コピー&ペーストのアーティファクトに注意する -- 不可視文字、スマート引用符、改行しないスペースがワードプロセッサやWebページから紛れ込むことがよくあります。
- 文字エンコーディングを確認する -- ファイルがUTF-8で保存されていることを確認します。他のエンコーディングは不可視のエラーを生じる可能性があります。
- リンターを使用する --
jsonプラグイン付きのESLintなどのツールが開発中にJSONエラーを検出します。
JSONパーサーは通常、最初の構文エラーのみを報告することに注意してください。そのエラーを修正し、再検証し、ドキュメントが合格するまで繰り返します。当サイトのJSONフォーマッター&バリデーターツールは、このプロセスを迅速化するための即時の詳細なエラーメッセージを提供します。