先讀懂資料結構,再調整空白與縮排
JSON 格式化線上工具 — 語法驗證、壓縮與 JSONPath 查詢
格式化能讓合法的 JSON 更好讀,卻不會自動修好語法,也不能證明資料內容可信。DevSexy 將排版與語法驗證分開,解析器有提供 offset 時,會一併顯示錯誤所在的行與欄。
原始 JSON
{"user":{"id":17,"roles":["editor"]}}解析結果
物件 · 1 個根層鍵 · 2 個巢狀值
節點路徑
$.user.roles[0] → “editor”
從原始 JSON 走到可追蹤的樹狀結構
錯誤位置怎麼看
行號與欄號是線索;真正漏掉的符號常在前一個 token。
少了逗號或引號時,解析器可能直到下一個欄位才確定語法無法繼續。診斷會保留原始錯誤訊息;若執行環境有回傳字元 offset,介面也會換算成行、欄位置,協助回頭檢查真正出錯的邊界。
2 "name": "Mole" 3 "active": true 4 "roles": ["admin"] ▲ 這個欄位前面少了逗號
排版選項會改變 diff;解析與重新序列化仍有資料邊界
縮排方式
2 個空白較精簡,4 個空白容易逐層掃讀,Tab 則可配合編輯器規範。輸出會重新序列化,因此數字寫法與跳脫字元的表面形式不保證原樣保留。
鍵名排序
遞迴排序鍵名能讓 fixture 與 snapshot 比較穩定,但會打亂人工安排的閱讀順序,所以必須由你主動開啟。
JSON 壓縮
這裡的壓縮是 parse 後再移除不具語意的空白,並非 ZIP 或字串壓縮。重複鍵、超出 JavaScript 安全整數範圍的數字與原始數字寫法不保證保真。
標準 JSON 不等於 JSONC
RFC JSON 不接受註解、尾端逗號、未加引號的鍵、NaN 或 Infinity。開啟 JSONC 選項後,本工具可接受註解與尾端逗號;但壓縮或針對查詢結果輸出時,會序列化解析後的值,不會保留註解。
✓ 標準 JSON:字串、數字、布林值、null、陣列與物件
× JSONC 擴充:註解與尾端逗號,必須明確開啟選項
先通過 JSON 語法驗證,再執行 JSONPath
對無法解析的文件下查詢,只會得到誤導性的結果。目前支援根節點、點號成員、陣列索引與 * 萬用選取等基本路徑;不宣稱支援 RFC 9535 的篩選器、slice、union 或遞迴下降等完整語法。
$.users[0].id$.users[*].email$.orders[*].statusJSON 格式化常見問題
- 格式化會改變 JSON 的值嗎?
- 對鍵名唯一、數字可由 JavaScript 精確表示的一般 JSON,目標是保留解析後的值;但輸出會重新序列化,空白、跳脫寫法與數字表示可能改變。重複鍵與超高精度數字不在保真承諾內。
- 可以格式化大型 JSON 文件嗎?
- 可以嘗試。工作會交給 Web Worker,避免直接阻塞頁面;沒有任意字元數上限,但實際可處理大小仍受裝置記憶體與瀏覽器資源限制。
- 為什麼錯誤位置在真正問題的後面?
- 解析器通常回報文法已無法繼續的位置,因此少了逗號、引號或括號時,錯誤可能落在緊接著出現的 token。不同瀏覽器提供的位置資訊也可能不同。
- JSONPath 和 JSON Pointer 是同一件事嗎?
- 不是。JSONPath 是選取一個或多個值的查詢語法;JSON Pointer 則以斜線分隔的 reference token 指向一個特定位置。