← 全部文章

線上修復 JSON:修復、驗證並格式化無效 JSON

尾隨逗號、單引號、未加引號的鍵、Python 字面量、markdown 程式碼柵欄 —— 線上 JSON 修復工具都能處理。學習修復解析器如何運作、何時使用,以及如何讓敏感資料留在本地。

JSON.parse() 毫不留情:一個錯位的逗號、一個未加引號的鍵、一個把 true 寫成了 True,整個應用就停擺。線上 JSON 修復器讓你貼入壞掉的 JSON,自動辨識並修復錯誤,再複製回乾淨、合法的 JSON —— 不需要碰你的程式碼,也不需要安裝任何東西。本指南講它們如何運作、能修哪些錯,以及什麼時候用。

什麼是線上 JSON 修復器?

線上 JSON 修復器是一個跑在瀏覽器中的工具:接收不合法的 JSON 作為輸入,套用一套修復啟發式,輸出合法的 JSON。優秀的修復器還會順手格式化結果,讓你看清結構。

跟只告訴你「毛病」的簡單校驗器不同,修復器會告訴你「哪裡有毛病」並把它改好。你拿到的是可用的輸出,而不只是錯誤訊息。

線上修復器最常修復的幾類 JSON 錯誤

尾隨逗號

JSON 中最常見的錯誤。物件或陣列最後一項後的逗號在 JavaScript 中合法,但在 JSON 中是不合法的。

// 無效
{ "name": "Alice", "score": 98, }

// 修好
{ "name": "Alice", "score": 98 }

單引號

JSON 要求字串與鍵都使用雙引號。單引號字串是 JavaScript 的習慣,許多開發者一不小心就帶過來了。

// 無效
{ 'name': 'Alice' }

// 修好
{ "name": "Alice" }

未加引號的鍵

JavaScript 物件字面值允許裸(未加引號的)鍵,JSON 不允許。

// 無效
{ name: "Alice", age: 30 }

// 修好
{ "name": "Alice", "age": 30 }

JavaScript 註解

JSON 沒有註解語法。從 JavaScript 原始碼複製過來的註解,或加到設定檔裡的註解,都會讓解析失敗。

// 無效
{
  "debug": true,  // 啟用日誌
  /* 上線前移除 */
  "verbose": false
}

// 修好
{
  "debug": true,
  "verbose": false
}

Python 字面值

Python 使用 TrueFalseNone 表示布林與 null。JSON 要求小寫的 truefalsenull

// 無效(Python 風格)
{ "active": True, "deleted": False, "nickname": None }

// 修好
{ "active": true, "deleted": false, "nickname": null }

Markdown 程式碼圍欄

當你讓 LLM(ChatGPT、Claude、Gemini)輸出 JSON 時,它常常會把結果包在 Markdown 程式碼區塊裡。反引號和語言標籤不屬於 JSON。

// 無效(帶 Markdown 圍欄)
```json
{ "name": "Alice", "age": 30 }
```

// 修好
{ "name": "Alice", "age": 30 }

未閉合的括號或缺失的值

被截斷的 JSON —— 來自被切斷的 API 回應或不完整的複製貼上 —— 會留下未閉合的物件或陣列。修復器可以自動閉合它們,產出語法合法的輸出。

// 無效(被截斷)
{ "users": [{ "id": 1, "name": "Alice"

// 修好(自動閉合)
{ "users": [{ "id": 1, "name": "Alice" }] }

文件開頭的 UTF-8 BOM

某些 Windows 工具寫出來的檔案會以 UTF-8 BOM 開頭(0xEF 0xBB 0xBF)。RFC 8259 禁止 JSON 開頭出現 BOM,JSON.parse 會以 0 位置的錯誤拒絕它 —— 看起來 像首字元不合法。修復階段會剝掉它;如果你手動解析,請先做 text.replace(/^/, '')

清理 AI 生成的 JSON(LLM 輸出)

今天最穩定的「幾乎是 JSON」的來源就是 LLM 回應。它們的模式一致到足以機械修復:

  • ```json … ``` 圍欄把負載包了起來
  • 陣列與物件裡的尾隨逗號
  • 訓練資料裡混入的 Python 風格字面值(TrueNone
  • 模型被 token 限制截斷時的括號不平衡
  • 「美化」帶來的智慧引號(“ ”

剝掉圍欄、跑修復、再校驗。專門針對 LLM 輸出的完整流程,請參見 修復 LLM JSON 輸出 指南。

線上 JSON 修復是怎麼運作的

簡單的修復器使用正規表示式 —— 例如把 ,} 替換為 } 來去掉尾隨逗號。這在簡單情境下能用,但當同樣的字元序列出現在字串值裡就會失敗。

更好的修復器使用修復解析器:一個在遇到意外 token 時不直接丟錯、而是嘗試復原並繼續的 JSON 解析器。它逐字元走過輸入,在上下文中套用啟發式:

  • 在該用雙引號的地方看到單引號時,切換引號模式
  • 在該有帶引號鍵的地方看到裸字時,加上引號
  • 在該是 true 的地方看到 True 時,把它轉為小寫
  • 在結構未閉合時到達輸入結尾,就閉合所有打開的括號

因為修復理解文法,它只在結構位置上修改 —— 永遠不會破壞字串內容。

什麼時候用線上 JSON 修復器

情境用線上修復器?
除錯一次性的 API 回應✅ 用 —— 最快得到可讀輸出
修復 LLM 生成的 JSON✅ 用 —— LLM 經常產生尾隨逗號與 Markdown 圍欄
快速修一份設定檔✅ 用 —— 看到修復後再到編輯器中手動套用
生產資料管線⚠️ 改用程式碼中的修復函式庫(例如 json-repair
資料含 API 金鑰或個人資訊⚠️ 使用瀏覽器本地執行的工具 —— 見下文

隱私:JSON 會不會離開你的瀏覽器?

這是對任何線上 JSON 工具最需要問的問題。許多線上格式化器與修復器會把你的輸入傳到伺服器 —— 資料可能會被記錄、被 CDN 快取、被搜尋引擎索引。

JSON Fix 完全在你的瀏覽器中執行。當你貼入 JSON 並點擊 Repair 時,處理發生在你裝置的 JavaScript 中 —— 什麼都不會傳到伺服器。你可以打開瀏覽器的 Network 面板核實:點擊按鈕時沒有發起任何請求。

這意味著可以安全地處理敏感資料,例如包含 token 的 API 回應、含個人資訊的資料庫匯出,或內部設定檔。完整解釋見 為什麼不要把敏感 JSON 貼到線上工具中

常見問題

怎樣線上修復 JSON?

把壞掉的 JSON 貼到一個瀏覽器修復器裡,例如 JSON Fix。它會辨識並修復尾隨逗號、單引號、未加引號的鍵、Python 字面值、註解與 Markdown 圍欄,然後美化輸出合法的 JSON 讓你複製回去 —— 不需要安裝也不需要註冊。

把敏感 JSON 貼到線上修復器裡安全嗎?

只有當工具完全在你的瀏覽器中執行時才安全。許多線上格式化器會 POST 你的輸入到伺服器,那裡可能會被記錄或快取。JSON Fix 在用戶端完成全部處理 —— 打開 Network 面板可以確認沒有發出請求。詳情見為什麼這件事很重要

JSON 修復器與校驗器有什麼差別?

校驗器只告訴你 JSON 無效以及位置;修復器還會修好它並回傳合法的輸出。更深入的對比見 JSON 格式化器 vs JSON 修復

線上修復器能修 AI 生成的 JSON 嗎?

能 —— LLM 輸出經常帶 Markdown 程式碼圍欄與尾隨逗號,修復器會自動剝掉。專項指南是 修復 LLM JSON 輸出

線上修復 JSON —— 立刻就能用

把你壞掉的 JSON 貼進 JSON Fix。它會:

  • 辨識錯誤類型
  • 修復尾隨逗號、單引號、未加引號的鍵、Python 字面值、註解與 Markdown 圍欄
  • 以一致的縮排美化輸出結果
  • 顯示一份變更 diff,方便你審閱修復
  • 100% 在你的瀏覽器中執行 —— 資料不會傳到任何地方

該套件中的其他工具: