JSON 修復
免費線上 JSON 修復工具,自動偵測並修復尾逗號、單引號、未加引號鍵、括號未閉合、註解及 Markdown 包裹等常見語法錯誤。專為 AI 輸出清洗和殘缺 JSON 還原設計,處理全程在瀏覽器本地完成。
相關推薦
什麼是 JSON 修復(JSON Repair)?
JSON 修復(JSON Repair)是把一個因語法錯誤而無法被嚴格 JSON 解析器消費的非標準 JSON 文字,自動還原為符合 RFC 8259 標準的合法 JSON 字串的過程。和「JSON 格式化(Beautify)」不同,JSON 修復處理的不是格式差異,而是結構性錯誤——尾逗號、單引號、缺失引號、未閉合括號、Markdown 包裹、註解等都會讓 JSON.parse() 直接拋出 SyntaxError,但它們在實際開發中又極為常見。
真實工程裡導致 JSON "不標準" 的源頭高度集中:① 從 ChatGPT / Claude / Gemini 等大模型複製時,輸出常被 Markdown 程式碼區塊(```json ... ```)包裹或附帶解釋性文字;② 從 JavaScript 物件的 console.log() 複製可能帶尾逗號和單引號;③ 設定檔常使用 JSON5 / JSONC 擴充語法(允許註解、未加引號鍵、多行字串等);④ 串流響應或日誌截取可能讓 JSON 在中途斷裂、缺少結尾的 `}` 或 `"`。JSON 修復工具掃描輸入文字,識別上述典型問題並按「最小侵入」原則還原為標準 JSON,同時盡量保留原始資料語意。
實現層面,JSON 修復通常由兩個階段組成:① 容錯解析(tolerant parse)— 用基於狀態機的掃描器而不是正則匹配來逐步處理字元流,能區分「字串內」和「字串外」的語法字元;② 規範化輸出(canonical output)— 用 `JSON.parse` + `JSON.stringify` 重新生成,確保輸出對任何下游嚴格解析器都 100% 合法。GeekFormat 的 JSON 修復工具在瀏覽器本地完成整個修復流程,原始內容不會發送到任何伺服器,適合處理含敏感資訊的 API 響應、內部設定檔、AI 模型輸出。
適用場景
- AI/大模型輸出清洗:把 ChatGPT/Claude 返回的帶 Markdown 包裹、解釋性文字和尾逗號的 JSON 一鍵轉為標準 JSON
- 介面除錯與排障:API 響應因閘道或網路問題被截斷時,快速補全括號與字串,定位原始資料結構
- 從 JavaScript 複製的物件字面值:單引號、尾隨逗號、未加引號鍵名一站式修正
- 設定檔清洗:JSON5/JSONC 中的註解剝離後得到標準 JSON,便於統一接入下游服務
- 日誌與剪貼簿資料修復:含註解、特殊空白或被截斷的 JSON 片段快速標準化
- 資料遷移與腳本預處理:在資料遷移鏈路中加入修復步驟,避免少量非法 JSON 阻斷整批 ETL
使用方法
- 將報錯、帶 Markdown 包裹或殘缺的 JSON 內容貼到左側輸入框,也支援點擊「範例」載入一個典型的損壞 JSON 或上傳 .json/.txt 檔案
- 工具會自動偵測並修復常見語法問題,右側輸出區顯示已格式化的標準 JSON 與每類問題的修復數量
- 若仍有紅色錯誤提示,可手工在輸入區修改後再觸發修復(Mac 按 ⌘+Shift+R 或 Windows 按 Ctrl+Shift+R)
- 確認結構無誤後,點擊「複製」把修復結果放入剪貼簿,或點擊「下載」儲存為 repaired.json 檔案繼續做格式化、校驗等後續處理
功能特點
- 覆蓋 7 類常見語法錯誤:尾隨逗號、單引號、未加引號鍵、未閉合字串、註解、缺失括號、Markdown 程式碼區塊包裹
- AI 輸出清洗最佳化:自動剝離 ```json 包裹與程式碼區塊外的解釋文字,識別 ChatGPT、Claude、Gemini 等大模型典型輸出
- JSON5/JSONC 相容:對含註解、寬鬆引號、特殊空白(如不可見 Unicode 字元)的擴充語法同樣能解析
- 殘缺 JSON 智慧補全:能處理 API 響應被截斷、複製內容缺失結尾大括號等情況,自動補全缺失的括號與引號
- 修復問題可視化:自動統計並展示每類問題被修復的次數,便於稽核與人工複核
- 本地處理保護隱私:解析、修復、格式化全部在瀏覽器中完成,輸入內容不發送到任何伺服器
- 與格式化無縫銜接:修復後的標準 JSON 可一鍵進入 JSON 格式化、Schema 校驗、代碼生成等後續流程
- 可載入檔案與範例:支援上傳 .json/.txt 檔案或點擊載入範例,便於快速驗證修復效果
程式碼範例
使用 jsonrepair JavaScript 函式庫進行程式化修復
javascript// npm install jsonrepair
import { jsonrepair } from 'jsonrepair';
const broken = `{
name: 'Alice',
age: 30,
tags: ['dev', 'writer',], // trailing comma + comment
}`;
try {
const fixed = jsonrepair(broken);
const obj = JSON.parse(fixed);
console.log(obj);
// => { name: 'Alice', age: 30, tags: ['dev', 'writer'] }
} catch (err) {
console.error('仍無法修復:', err.message);
}使用 jsonrepair Python 函式庫進行程式化修復
python# pip install jsonrepair
from jsonrepair import jsonrepair
import json
broken = '''{
name: "Alice",
age: 30,
tags: ["dev", "writer",], // trailing comma + comment
}'''
fixed = jsonrepair(broken)
obj = json.loads(fixed)
print(obj)
# => {'name': 'Alice', 'age': 30, 'tags': ['dev', 'writer']}使用 jq + sed 簡單修復尾逗號(僅作應急)
bash# 去除物件/陣列末尾的逗號 (應急方案, 不處理註解/單引號) # 複雜場景請用 jsonrepair 等專門函式庫 sed -E 's/,([ \t]*[}\]])/\1/g' broken.json > clean.json # 校驗修復結果 jq . clean.json >/dev/null && echo 'JSON is valid'
常見問題
JSON 修復與 JSON 格式化有什麼差別?
JSON 格式化只對內容本身合法、僅縮排或空格不一致的 JSON 重新排版;JSON 修復則專門處理語法錯誤的 JSON,會先糾正尾逗號、單引號、註解、缺失括號等結構問題,再輸出標準格式。當格式化工具報 SyntaxError 時,應當先使用 JSON 修復。
工具支援修復哪些常見的 JSON 語法錯誤?
工具內建智慧修復演算法,可處理以下高頻問題:1) 尾隨逗號(Trailing comma);2) 單引號代替雙引號;3) 鍵名未加引號;4) 字串未閉合;5) 包含 JavaScript 單行/區塊註解;6) 被 Markdown 程式碼區塊包裹的 JSON;7) 殘缺結尾導致的大括號/方括號缺失。
為什麼 AI 或大模型輸出的 JSON 經常不標準?
大型語言模型(如 ChatGPT、Claude、Gemini)產生的 JSON 經常帶 Markdown 包裹(```json ... ```)、解釋性前綴/後綴文字、尾逗號、註解或由於 Token 截斷導致的不完整結構。JSON 修復專門針對這類場景最佳化,一鍵清洗 AI 輸出為合法 JSON。
修復後的 JSON 在結構上一定和原始資料一致嗎?
修復後輸出的是符合 JSON 標準的合法字串,資料語意在絕大多數情況下會保留。但由於修復基於啟發式規則,遇到極端殘缺或歧義場景(如同一行內多處都缺逗號)時,可能與原始意圖略有偏差。建議對關鍵資料再使用 Schema 校驗或人工複核。
為什麼不直接用 Python json.loads 或 JavaScript JSON.parse?
原生解析器在遇到 SyntaxError 時只能報錯,不能修復。JSON 修復是補充原生解析器之前的容錯層:先嘗試修復文字,再走原生解析器,確保最終輸出可被嚴格 JSON 解析器消費。生產環境也可在伺服器端以相同思路進行預處理。
JSON5 / JSONC 裡的註解會被保留嗎?
不會。註解屬於 JSON5 擴充語法而非標準 JSON 的一部分,工具會將其剝離以保證輸出符合標準 JSON。如果希望保留註解,可繼續使用 JSON5 原始檔或 JSONC 工具鏈;如需將 JSON5 轉為標準 JSON,本工具即可直接完成。
被截斷的 JSON(例如串流輸出被切斷)能修復嗎?
能。工具會嘗試匹配缺失的右括號、方括號和字串結束引號,並盡量保留已識別的內容。注意:如果被截斷的位置正好在某個字串字面值內部,可能需要手動補齊關鍵字元。
修復後的 JSON 會出現資料遺失嗎?
在常見修復場景中(去尾逗號、加引號、補齊括號、剝離註解),資料語意都會被完整保留。極少數情況下,當原始內容存在不可逆歧義(例如巢狀層數被破壞)時,工具會盡量保守修復並保持原樣輸出;不會主動刪除欄位或鍵。
可以批次修復多個 JSON 嗎?
本工具按單次輸入修復。批次場景推薦先在本地用腳本(如 Python 的 jsonrepair 函式庫、josdejong/jsonrepair npm 套件)呼叫底層演算法處理,再將結果匯入本工具進行人工校驗與格式化。
修復後還需要再做格式化和 Schema 校驗嗎?
推薦。修復主要解決語法層面的錯誤,格式化和 Schema 校驗則保證可讀性與業務正確性。修復工具的輸出會與 GeekFormat 的 JSON 格式化、Schema 校驗、代碼生成等工具無縫銜接。
工具會上傳我的 JSON 到伺服器嗎?
不會。所有解析、修復、格式化均在瀏覽器本地完成,輸入與中間結果都不會發送到任何伺服器。可離線使用,適合處理含敏感資訊(如生產環境 API 響應、內部設定)的 JSON。
可以固定每次使用的修復策略嗎?
本工具預設開啟全部常見修復規則以保證成功率。如果需要針對特定語言/團隊的規範進行精細控制,可在生產環境中使用 jsonrepair 函式庫並按需啟用或關閉某些規則,本工具的輸出也可作為後續校驗的標準化輸入。
故障排查
「無法修復此 JSON」錯誤
原因:輸入文字存在嚴重結構損壞,例如多處括號缺失、字串字面值被截斷、字元集被破壞。解決方法:先用純文字編輯器打開原始檔案,確認編碼為 UTF-8 沒有 BOM、且非壓縮二進位檔;若資料來自 API 響應可聯繫上游補全;對極端殘缺的資料集建議直接用原始檔。
修復後欄位被移到錯誤位置
原因:原文中註解或字串字面值包含 JSON 語法字元(如 //、/*、})造成解析器誤判;或巢狀層級過深導致括號匹配錯位。解決方法:手工將字串中的 //、/* 用反斜線跳脫;對巢狀深的資料先在外層增加臨時括號或換行再修復。
AI 輸出裡包含解釋性文字未被剝離
原因:AI 輸出常以自然語言開頭/結尾(如「下面是結果:」),且可能跨多行。解決方法:先用文字編輯器刪掉 JSON 區塊外的文字,僅保留最外層 ```json 包裹的內容;如工具仍無法識別,可手動加上最外層的 { } 後再修復。
修復後大小沒變或部分字元被替換
原因:原文裡包含反斜線、Unicode 跳脫或 HTML 實體,被工具按 JSON 規則重新跳脫。解決方法:確認原文是否在 JS 字串中巢狀;若在 HTML 頁面中可先用 HTML Decode 還原;跳脫後字元變多屬正常現象。
瀏覽器提示「記憶體不足」或頁面卡死
原因:單次輸入超過 5–10 MB 時瀏覽器會承受較大記憶體壓力。解決方法:把資料拆成多個小批次(每次 1–2 MB);或在伺服器端使用 jsonrepair 函式庫做串流處理;修復後結果與原文相差不大屬於正常。
修復後 Schema 校驗仍報錯
原因:JSON 修復只解決語法層錯誤,不負責業務欄位名、類型或取值是否符合 Schema。解決方法:使用 GeekFormat 的 JSON Schema 校驗工具檢查欄位約束;按報錯定位具體欄位並人工修正。
術語表
- JSON
- JavaScript Object Notation,一種基於鍵值對的輕量級資料交換格式,定義於 RFC 8259,是 REST API、設定檔、日誌的事實標準。
- RFC 8259
- IETF 發布的 JSON 官方規範,定義合法 JSON 的嚴格語法——所有鍵必須用雙引號、字串中只有有限幾個字元需要跳脫、不允許註解和尾逗號。
- JSON.parse
- JavaScript / 現代瀏覽器內建的嚴格 JSON 解析器,遵循 RFC 8259;遇到任何語法錯誤直接拋 SyntaxError,不能容錯修復。
- JSON5
- JSON 的擴充語法(非標準),允許未加引號鍵、單引號字串、註解(// 和 /* */)、尾逗號、十六進位數字等,更適合人類手寫但不兼容 JSON.parse。
- JSONC
- JSON with Comments,VS Code 等編輯器對帶註解 JSON 設定檔的統稱(如 tsconfig.json),實際上是 JSON5 的一個常見別名。
- 尾逗號 Trailing Comma
- 物件或陣列最後一個元素後多餘的逗號,JavaScript 允許但 JSON 標準禁止,是 LLM 輸出和 console.log() 複製最常見的語法錯誤。
- Markdown 程式碼區塊
- 由三個反引號(```)包裹的程式碼片段,LLM 在輸出 JSON 時常會自動加 ```json ... ``` 包裹,直接貼到 JSON.parse() 會失敗。
- 容錯解析 Tolerant Parser
- 能在遇到語法錯誤時嘗試恢復並繼續解析的解析器;JSON 修復工具的核心引擎,區別於嚴格的 JSON.parse。
- SyntaxError
- JavaScript 拋出的語法錯誤例外;嚴格 JSON 解析器在遇到任何不符合 RFC 8259 的輸入時都會拋此錯誤。
- Canonical JSON 規範化 JSON
- 經過 parse + stringify 重新生成的 JSON,鍵名順序穩定、無多餘空白、100% 相容標準解析器,是 JSON 修復工具的最終輸出格式。
JSON 修復常見錯誤類型與示例
| 錯誤類別 | 原始寫法 | 修復後 | 修復方式 |
|---|---|---|---|
| 尾逗號 | { "a": 1, } | { "a": 1 } | 移除最後一個元素後的逗號 |
| 單引號 | { 'a': 1 } | { "a": 1 } | 把所有單引號替換為雙引號 |
| 未加引號鍵 | { a: 1 } | { "a": 1 } | 為鍵名補上雙引號 |
| 單行註解 | { // 註解
"a": 1 } | { "a": 1 } | 剝離 // 整行註解 |
| 區塊註解 | { /* 區塊 */ "a": 1 } | { "a": 1 } | 剝離 /* */ 區塊註解 |
| Markdown 包裹 | ```json
{ "a": 1 }
``` | { "a": 1 } | 移除 ```json 與 ``` 包裹 |
| 字串未閉合 | { "a": "hello } | { "a": "hello" } | 補齊缺失的字串結束引號 |
| 括號缺失 | { "a": 1 | { "a": 1 } | 按堆疊式匹配補齊右大括號/方括號 |
JSON 修復 vs JSON 格式化 vs JSON Schema 校驗
| 工具 | 解決什麼問題 | 輸入要求 | 失敗模式 |
|---|---|---|---|
| JSON 修復 | 把語法錯誤的 JSON 轉為合法 JSON | 可容錯,接受非標準 JSON | 殘缺到無法猜測結構時報錯 |
| JSON 格式化 | 對合法 JSON 重新排版 | 必須已是合法 JSON | SyntaxError 直接報錯 |
| JSON 壓縮 | 去除空白,減小體積 | 必須已是合法 JSON | SyntaxError 直接報錯 |
| JSON Schema 校驗 | 檢查欄位類型/取值是否符合業務約束 | 必須已是合法 JSON | 列出每個欄位違反的規則 |
| JSON Merge/Sort | 多源合併 / 鍵名排序 | 必須已是合法 JSON | SyntaxError 直接報錯 |
Authoritative References
- JSON 壓縮
- CSV 轉 JSON
- JSON 轉 CSV
- JSON Diff
- JSON Escape / Unescape
- JSON 扁平化
- JSON 格式化
- JSON 產生器
- JSONPath 查詢
- JSON 合併
- JSON 修復
- JSON Schema 驗證器
- JSON 排序
- JSON Stringify
- JSON 轉 HTML 表格
- JSON 轉 Java
- JSON 轉 Markdown
- JSON 轉 SQL
- JSON 轉 TOML
- JSON 轉 TypeScript
- XML 轉 JSON
- JSON 轉 XML
- YAML 轉 JSON
- JSON 轉 YAML
- JSON 轉 Go
- JSON 轉 Rust
- JSON 轉 Swift
- JSON轉C#
- JSON 轉 C++
- JSON 轉 PHP
- JSON 轉 Python