修復 JSON 中的單引號
JSON 字串與物件鍵必須使用雙引號。單引號值常見於 JavaScript 片段、類似 Python 的輸出,以及 LLM 回應中。
為什麼單引號不行
嚴格 JSON 只接受用雙引號的字串。解析器會拒絕 {'name':'Ada'},雖然 JavaScript 開發者可能覺得這寫法很眼熟。
錯誤範例
{ 'name': 'Ada', 'active': true }
修正後的 JSON
{ "name": "Ada", "active": true }
單引號文字是哪裡來的
Python 的 repr() 和 dict 列印、從主控台複製的 JavaScript 物件字面值、Ruby 的 hash inspect 輸出,以及很多 LLM 回應都用單引號。這些都不是 JSON —— 它們是各語言原生的字面值,只是長得像而已。
為什麼直接做尋找取代很危險
無腦把 ' 換成 ",會讓含有撇號的值出問題,例如 { 'note': 'it\'s fine' }。取代後內部的撇號會跟新的字串界定符衝突。安全的轉換器必須追蹤引號上下文,只換界定符而不動內部字元。
安全的轉換策略
先做 token 化:走訪文字、用開頭的引號辨認字串邊界,再用雙引號重組每個 token —— 對內部的雙引號做跳脫,並把多餘的跳脫單引號拿掉。本站的修復工具一次就能處理完。
相關的 JSON 語法錯誤
用單引號的 JSON 通常還會夾帶其他 JavaScript 風格的小錯:未加引號的鍵、尾隨逗號、行註解或 undefined。修完引號之後,再驗證一次找看看還剩什麼。
FAQ
問:JSON5 接受單引號字串嗎?答:可以,JSON5 允許。問:Python 的 json.loads 接受單引號嗎?答:不接受 —— 如果原始來源真的是 Python 字面值,請改用 ast.literal_eval;否則先把引號換過去。問: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 物件轉換工具