修復 JSON 中的尾隨逗號
物件最後一個屬性或陣列最後一個項目後面的尾隨逗號,在部分 JavaScript 場景下允許,但在 JSON 中並不合法。
為什麼會出錯
JavaScript 物件字面值常常允許最後一項後面加逗號,但 JSON 要求最後一項後面必須直接接著關閉的中括號或大括號。
錯誤範例
{ "name": "Ada", "active": true, }
修正後的 JSON
{ "name": "Ada", "active": true }
尾隨逗號是哪裡來的
多半是有人手動編輯設定、把最後一項註解掉,或是直接從 JavaScript/TypeScript 程式碼貼過來。模板引擎與程式碼產生器在迴圈裡無腦加逗號,也會產生這種狀況。
為什麼有些解析器接受、JSON 卻不接受
JavaScript 物件字面值、JSON5、JSONC、YAML,以及多數程式語言的字面值語法都允許尾隨逗號,因為這樣 diff 比較乾淨。但 RFC 8259 JSON 故意不允許 —— JSON.parse、Go 的 encoding/json、Python 的 json 模組這類嚴格解析器都會拒絕。
在進入正式環境之前抓到尾隨逗號
在 CI 用嚴格的 JSON 解析器 lint 設定檔(jq、python -m json.tool 或 node -e 'JSON.parse(...)')。在 TypeScript 專案裡,把 Prettier 的 .json 設定設為 "trailingComma": "none",這樣格式化時就不會自動加上去。
尾隨逗號未必就是真正的 bug
如果有尾隨逗號的 payload 來自某個 API 或會輸出 JSON 的程式庫,問題其實是在上游的序列化,不在使用端。本地把逗號修掉只是把產生端的 bug 蓋住,下一次還會出現 —— 改的是輸出端。
FAQ
問:JSON.parse 之後會接受尾隨逗號嗎?答:不會 —— 嚴格模式才是標準。問:JSON5 算不算安全的替代?答:只適合人工編輯的設定檔,千萬別用在傳輸協定上。問:自動修復工具能只去掉尾隨逗號嗎?答: 可以,貼上 JSON 它會連同其他常見語法錯誤一併處理。
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 物件轉換工具