修復 JSON 中未加引號的鍵
像是 name、active、profile 這類看起來像識別字的鍵,在合法 JSON 中也必須加上引號。
為什麼未加引 號的鍵會出錯
JavaScript 在物件字面值裡允許不加引號的屬性名。JSON 不行;每個物件鍵都必須是用雙引號包起來的字串。
錯誤範例
{ name: "Ada", active: true }
修正後的 JSON
{ "name": "Ada", "active": true }
為什麼 JavaScript 識別字會像 JSON 鍵
在 JavaScript 物件字面值裡,{ name: "Ada" } 是合法的,因為 name 是合法識別字。JSON 把這個捷徑拿掉,讓解析器對每一個鍵只需要辨識一種形狀 —— 帶引號的字串。這樣文法就夠小,可以在任何語言裡實作。
永遠需要引號的鍵
即使解析器允許裸識別字,仍有不少鍵必須加引號:return、class 這類保留字,含有連字號或點的名稱,以數字開頭的名稱,以及含有合字字元或 emoji 的 Unicode 名稱。對所有鍵都加引號剛好可以避開所有這些邊界情境。
自動修復何時可以安全地把裸鍵加上引號
修復工具只會對出現在鍵位置的裸識別字加引號 —— 也就是緊接在 { 或 , 後面、後面又是 : 的識別字。它不會去動已經加了引號的鍵、值或字串內部的文字,所以文件裡同時混著合法和不合法的鍵時,加引號仍然安全。
JSON5 與 JSONC
JSON5 與 JSONC(VS Code 設定使用的格式)都允許未加引號的鍵與註解。它們適合人工編輯的設定檔,但不適合做為交換格式 —— 永遠不要透過 API 把 JSON5 拿出去,標準客戶端會拒絕。
FAQ
問:為什麼我的 JSON 裡有未加引號的鍵?答:通常是從 JavaScript 物件字面值複製過來,或是某個模板引擎忘了加引號。問:package.json 可以不加引號嗎?答:不行 —— package.json 是嚴格 JSON;只有 tsconfig.json(JSONC)能容忍。
JSON 修復指南
主題中心
- JSON Parse Errors: Read the Message, Jump to the Fix
- Fix Invalid JSON: From 'What's Wrong' to a Clean File
- JSON Formatter, Validator, Viewer: Pick the Right Tool
- Repair LLM JSON Output: Handling Almost-JSON from AI
- Privacy: JSON Tools That Don't Leave Your Browser
- JSON Interop: YAML, CSV, XML, JWT, Schema
具體指南
- 如何解碼 Base64 字串(以及 JWT Payload)
- URL 編碼:對查詢參數與路徑做百分號編碼
- 將 YAML 轉為 JSON(並避免縮排錯誤)
- 將 JSON 轉為 CSV:把物件陣列扁平化
- 將 JSON 轉為 XML:根元素、屬性與陣列
- 將 JSON 跳脫為字串字面值(並解碼被雙重編碼的 JSON)
- 修復 JSON 中的尾隨逗號
- 修復 JSON 中的單引號
- 修復 LLM 輸出的 JSON
- 修復 JSON 解析錯誤:Expected Property Name
- JSON 與 JavaScript 物件字面值的差異
- 在發送 API 請求前驗證 JSON
- JSON 格式化器 vs JSON 修復工具
- 修復 JSON Unexpected Token 錯誤
- JSON 轉 JavaScript 物件轉換工具