不容妥協的規則,與例外在哪裡 — Syntax Rules
JSON 的優點是「機器零歧義」,代價是「人寫起來很嚴格」。 這一單元把會直接報錯的規則一次講完。
鍵與字串值一律雙引號。單引號、無引號都不行。
{ name: 'Alice' } # 鍵沒引號 + 值單引號
{ "name": 'Alice' } # 值單引號
{ "name": "Alice" } # 全部雙引號
JSON 不允許任何註解。//、#、/* */ 都會直接解析失敗。
{ // 這行會讓解析失敗 "a": 1 }
物件的最後一個鍵值、陣列的最後一個元素,後面不能有逗號。
{ "a": 1, "b": 2, # ← 最後一項 }
{ "a": 1, "b": 2 }
注意:JavaScript 的物件/陣列允許尾逗號,但 JSON 不允許——兩者很容易混在一起出錯。
鍵不能用數字、布林或不加引號(即使有些語言的字典允許)。
{ 1: "x" } # 數字鍵 { true: "x" } # 布林鍵 { a: 1 } # 無引號鍵
{ "1": "x", "true": "x", "a": 1 }
一個 JSON 文件頂層只能是一個值(通常是一個物件或陣列)。多個值分開寫、或加逗號串接都不行。
{ "a": 1 }
{ "b": 2 } # 第二個物件
[ { "a": 1 }, { "b": 2 } ]
| 常被誤會可以寫 | 真相 |
|---|---|
// 註解 | ❌ 非法(JSONC 才行) |
單引號 'x' | ❌ 非法 |
| 尾逗號 | ❌ 非法 |
十六進位 0xFF | ❌ 非法(JSON5 才行) |
| NaN / Infinity | ❌ 非法(JSON5 才行) |
undefined | ❌ 非法 |