開發者工具 / 013
JSON 格式化工具
貼上 JSON 即可格式化、壓縮與驗證語法,錯誤時顯示解析訊息,並可一鍵複製結果。
尚未產生結果為什麼做這個
閱讀未排版的 JSON 或查找語法錯誤時,手動對括號與逗號很容易漏看。這個工具使用瀏覽器原生 JSON 解析功能完成排版、壓縮與基本語法驗證。
這個工具怎麼用
把 JSON 貼進上方輸入框,按「格式化」會依標準縮排重新排版,適合閱讀與 code review;按「壓縮」則移除所有空白與換行,得到體積最小的單行字串,適合放進設定檔或網址參數。
語法有問題時按「驗證」,狀態列會顯示錯誤原因與位置。最常見的錯誤是結尾多了一個逗號、用單引號當字串引號、鍵名沒有加雙引號,以及括號沒有成對關閉。
中文、emoji 等非 ASCII 字元會原樣保留,不會被轉成 \u 跳脫序列,排版後仍然直接看得懂。
排版與壓縮使用 JSON.parse 與 JSON.stringify 重新解析後輸出。對有效 JSON 而言,資料結構會維持一致;原本的空白、換行與物件鍵的排版方式則不會保留。
JSON 比 JavaScript 物件嚴格:鍵名一定要用雙引號、字串不能用單引號、不能有註解、不能有結尾逗號,也不能出現 `undefined`、`NaN` 或 `Infinity`;數字不能有前導零,也不能寫成十六進位。從程式碼裡複製出來的「像 JSON 的東西」多半違反其中一條,用驗證功能可以立刻看出是哪一行。
還有一個容易被忽略的限制:本工具以瀏覽器的 `JSON.parse` 解析,數字會被轉成 JavaScript 的雙精度浮點數,所以超過 2⁵³−1(9007199254740991)的整數會失去精度,例如 `9007199254740993` 會變成 `9007199254740992`;`1.0` 重新輸出也會變成 `1`。處理 64 位元 ID 時,建議在 API 端把它當成字串傳遞,並在格式化前確認這個行為不會影響你的資料。
舉兩個實際的錯誤訊息:貼上 `{"name": "W", }`(結尾多一個逗號),Chrome 會回報「Expected double-quoted property name in JSON at position 14 (line 1 column 15)」——它在逗號後面等一個鍵名,結果遇到了 `}`,位置指的就是那個 `}`。貼上 `{"name": 'W'}`(字串用單引號)則會得到以「Unexpected token」開頭的訊息。錯誤訊息是瀏覽器提供的,Firefox、Safari 的措詞與位置格式會不太一樣,但都會指向第一個出錯的地方。
格式化固定使用 2 個空白縮排,陣列裡的每個元素各占一行。例如 `{"a":1,"b":[1,2]}` 格式化後是 7 行,`1` 與 `2` 各自獨立一行;需要 4 個空白或 Tab 縮排時,請在編輯器裡另外轉換。
常見問題
格式化和壓縮差在哪?
格式化會加入換行與縮排,方便閱讀與 code review;壓縮則移除非必要空白與換行。兩者在解析後代表相同的 JSON 資料,但原始文字排版不會被保留。
為什麼我的 JSON 一直說格式錯誤?
按「驗證」看錯誤訊息指到的位置。最常見的原因是最後一個項目後面多了逗號、字串用單引號包住、鍵名沒加雙引號,或是從程式碼複製過來時帶進了 JavaScript 的註解——JSON 標準不允許註解。
可以處理多大的檔案?
沒有硬性上限,瓶頸在你裝置的記憶體與瀏覽器的處理能力。數 MB 的 JSON 通常沒問題,但幾十 MB 以上排版時分頁可能會短暫卡住,這種規模建議用本機的命令列工具處理。
貼上的內容會被記錄嗎?
JSON 的解析、格式化與壓縮在目前頁面中完成,不需要把內容送到格式化 API。重新整理後,未另外保存的內容會清空。
格式化之後數字變了,是工具壞了嗎?
不是。JavaScript 的數字只有 53 位元的整數精度,超過 9007199254740991 的整數無法精確表示,`1.0` 與 `1` 對 JavaScript 也是同一個值。若資料裡有很大的 ID 或需要保留小數位數,請以字串形式傳遞。
只貼一個字串或數字,為什麼「驗證」說格式錯誤?
依照 JSON 標準,單獨的 `"abc"` 或 `123` 其實也是合法的 JSON,但這個工具的「驗證」只把最外層是物件 `{}` 或陣列 `[]` 的內容判定為正確,因為 API 回應與設定檔幾乎都是這兩種。「格式化」與「壓縮」則照標準處理,單一值也能正常輸出。