JSON 格式化工具
什麼是 JSON 格式化?
JSON 格式化工具會為壓縮或混亂的 JSON 加上縮排、換行和清楚層級,使其更容易閱讀和排查。JSON 常用於 API 回應、設定檔、日誌、功能開關、測試資料和低程式碼整合,一個缺少逗號、錯誤引號或意外巢狀都可能導致解析失敗。這個工具能協助快速查看物件、陣列、鍵、值和可能出錯的位置,也可以在需要較小載荷時重新壓縮。格式化不會改變資料含義,也不會自動驗證業務 Schema;在正式介面中,欄位型別、必填項、null 處理和版本契約仍需要單獨檢查。
使用方式
使用方式
- 在左側輸入框中貼上或輸入 JSON 資料
- 選擇縮排大小(2 個空格、4 個空格或 Tab)
- 點選「格式化」美化排版,或點選「壓縮」移除空白
- 結果會自動顯示在右側,並附語法高亮
- 點選「複製」或「下載」儲存結果
JSON 驗證注意事項
- 格式化可驗證文字為合法 JSON,但無法保證資料符合您的業務結構。
- 出現錯誤時,請檢查錯誤訊息提示的行與列,是否有多餘的單引號、尾隨逗號、註解或未轉義的控制字元。
使用場景
技術原理
JSON(JavaScript Object Notation)由 RFC 8259 / ECMA-404 定義。其語法是 JavaScript 物件字面值的嚴格子集:字串必須以雙引號包裹,鍵必須加引號,尾隨逗號不合法,註解被禁止。格式化器使用 `JSON.parse()` 將文件解析為宿主語言的物件圖,然後透過 `JSON.stringify(value, replacer, indent)` 重新序列化,其中 indent 為數字(1-10 個空格)或字串(`'\t'`)。解析是 O(n) 複雜度,通常比 stringify 階段更快,因為輸出建構需要配置新字串。 數值處理遵循 IEEE 754 雙精度浮點數:大於 `Number.MAX_SAFE_INTEGER`(2^53 - 1 = 9007199254740991)的整數會失去精度,因此 `9007199254740993` 往返後變成 `9007199254740992`。小數重複如 `0.1 + 0.2` 經解析後為 `0.30000000000000004`。Unicode 字串允許 `\uXXXX` 跳脫,包括代理對(`\uD83D\uDE00` → 😀);解析器拒絕孤立的未配對代理項。空白僅在字串內有意義——詞法單元之間的空格、Tab、LF、CR 的任意組合解析結果相同。 常見的非標準寬容格式包括 JSON5(註解、尾隨逗號、無引號鍵)和 JSONC(VS Code 設定檔)。標準 JSON 不允許這些,`JSON.parse` 遇到時會拋出 `SyntaxError`。串流替代方案如 NDJSON(每行一個物件)和 JSON Lines 可避免將整個文件載入記憶體。對於深度巢狀的輸入,V8 堆疊限制(約 10,000 個幀)會限制基於遞迴的解析器;正式環境的解析器使用迭代式狀態機來突破此上限。
- RFC 8259 / ECMA-404 語法——六種值型別(物件、陣列、字串、數字、true/false、null);字串使用雙引號;鍵必須加引號;無尾隨逗號;無註解。
- `JSON.parse(text)` 為 O(n) 複雜度,對無效輸入拋出帶字元偏移量的 `SyntaxError`;`JSON.stringify(value, replacer, indent)` 以 2-10 個空格或 `'\t'` 縮排產生格式化輸出。
- IEEE 754 數值精度:`Number.MAX_SAFE_INTEGER = 2^53 - 1`;超出此範圍的整數會四捨五入到最接近的可表示雙精度值,因此聊天 ID 和 Twitter Snowflake ID 必須以字串傳輸。
- Unicode `\uXXXX` 跳脫支援整個 BMP;非 BMP 字元需要代理對編碼 `\uD83D\uDE00`;解析器依 RFC 8259 第 8.2 節拒絕孤立的未配對代理項。
- 常見解析失敗:單引號字串(`'foo'`)、最後一個陣列/物件元素後的尾隨逗號、字串內未跳脫的控制字元、未跳脫的反斜線、缺少關閉 `}`/`]`、開頭的 BOM(`\uFEFF`)。
- 循環引用在 `JSON.stringify` 中拋出 `TypeError: cyclic object value`;使用帶 WeakSet 的 `replacer` 回呼來打斷循環,或使用 `flatted` / `json-stringify-safe` 等函式庫。
- 非標準變體:JSON5(`.json5`,允許註解和尾隨逗號)、JSONC(VS Code 設定檔)、NDJSON / JSON Lines(每行一個物件,串流友善)——全部被嚴格的 `JSON.parse` 拒絕。
範例
物件範例
輸入:
{
"name": "ToolAct",
"type": "web tool",
"active": true
}
輸出: 以 2 個空白縮排美化輸出,鍵的順序保持穩定陣列範例
輸入: [1,2,3,"a","b","c"]
輸出: 以 2 個空白縮排格式化;數字維持數值型別,字串保留引號巢狀結構
輸入:
{"user":{"name":"Alex","skills":["JavaScript","Python"]}}
輸出:
{
"user": {
"name": "Alex",
"skills": [
"JavaScript",
"Python"
]
}
}
備註: 巢狀的物件與陣列會遞迴縮排;可在工具列選擇縮排寬度常見問題
這個格式化工具會做什麼?
重新格式化 JSON:以您選擇的縮排(2 或 4 個空格)美化排版,或壓縮成單行。解析過程會同時驗證,因此語法錯誤會以行列號回報。
為什麼我的 JSON 被判為無效?
常見原因:尾隨逗號(JS 合法、JSON 不合法)、單引號字串(必須是雙引號)、未加引號的鍵、註解(// 或 /* */),或括號缺失。本頁會回報解析失敗的位置。JSON5 與 JSONC(含註解的 JSON)是 JSON 的超集——若需要請改用其他解析器。
鍵的順序會被保留嗎?
JSON 規範規定鍵的順序沒有意義,但大多數解析器在來回轉換時都會保留。本工具會保留插入順序,這通常更利於做差異比對。
可以處理非常大的 JSON 檔案嗎?
現代瀏覽器可以處理 10–50 MB 的 JSON 檔,但編輯器可能會變慢。對於數百 MB 的檔案,建議使用串流式解析器(jq 命令列工具、ndjson 工具);瀏覽器解析器會把整棵樹載入記憶體。
我的 JSON 會被上傳嗎?
不會。解析與格式化都在您的瀏覽器中透過 JSON.parse 與 JSON.stringify 完成。貼上的 JSON 不會被傳輸出去。
為什麼大數字會失去精度?
JavaScript 的 JSON.parse 使用 Number,也就是 IEEE 754 雙精度浮點。超過 2^53 的整數會失去精度(例如 9007199254740993 會被默默地四捨五入)。若需要 BigInt 或保留字串形式的解析,請改用自訂解析器,或在產生端就將大數字標記為字串。
JSONC(含註解的 JSON)呢?
嚴格 JSON 不允許註解。部分 IDE(如 VS Code 的設定檔)使用 JSONC,額外支援 // 與 /* */ 註解。格式化工具通常會提供「JSONC」模式以保留註解;在嚴格模式下,註解就是語法錯誤。