📋
← ガむド䞀芧に戻る

䞀般的なJSON構文゚ラヌずバリデヌタヌでの修正方法

· タグ: json, json-errors, json-validation, json-syntax, debugging, developer-tips

䞀般的な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゚ラヌを効果的にデバッグする方法

  1. JSONバリデヌタヌを䜿甚する -- JSONを無料のJSONバリデヌタヌに貌り付けお、最初の゚ラヌの正確な行ず列を取埗したす。
  2. 段階的に怜蚌する -- 倧きなファむルの堎合、゚ラヌを切り分けるためにセクションごずに怜蚌したす。
  3. コピヌペヌストのアヌティファクトに泚意する -- 䞍可芖文字、スマヌト匕甚笊、改行しないスペヌスがワヌドプロセッサやWebペヌゞから玛れ蟌むこずがよくありたす。
  4. 文字゚ンコヌディングを確認する -- ファむルがUTF-8で保存されおいるこずを確認したす。他の゚ンコヌディングは䞍可芖の゚ラヌを生じる可胜性がありたす。
  5. リンタヌを䜿甚する -- jsonプラグむン付きのESLintなどのツヌルが開発䞭にJSON゚ラヌを怜出したす。

JSONパヌサヌは通垞、最初の構文゚ラヌのみを報告するこずに泚意しおください。その゚ラヌを修正し、再怜蚌し、ドキュメントが合栌するたで繰り返したす。圓サむトのJSONフォヌマッタヌバリデヌタヌツヌルは、このプロセスを迅速化するための即時の詳现な゚ラヌメッセヌゞを提䟛したす。

䞀般的なJSON構文゚ラヌずバリデヌタヌでの修正方法 - CoolTool