JSON 格式化最佳實務:易讀、有效且高效
快速解答
使用 2 個空格縮排以實現人類可讀的 JSON,無尾隨逗號、雙引號鍵和一致的鍵順序(按字母順序或域含義)。縮小 JSON 用於生產傳輸,並漂亮列印用於開發。使用我們免費的 JSON 格式化程式可立即在兩者之間切換。
介紹
JSON 格式選擇會影響可讀性、檔案大小和偵錯速度。雖然 JSON 語法是由 RFC 8259 嚴格定義的,但如何縮排、排序鍵和處理空格是一個約定問題。本指南解釋了廣泛採用的最佳實踐,以便您的 JSON 在團隊之間保持一致、易於調試且在線高效。
步步
-
選擇縮排寬度
2 個空格是最常見的約定(Prettier、ESLint、Google JSON 樣式指南)。對於深度嵌套的配置來說,4 個空格是可以接受的。不鼓勵使用選項卡,因為不同編輯器的渲染效果不同。選擇一個並在整個專案範圍內強制執行。
-
一致地訂購密鑰
要么按字母順序對鍵進行排序以獲得確定性輸出(對於緩存和差異很有用),要么按域含義進行分組(首先是 id,然後是屬性,然後是關係)。避免隨機密鑰順序 - 它會使差異變得嘈雜並破壞快照測試。
-
縮小生產運輸
縮小 JSON 刪除所有非必要的空白,將有效負載大小減少 10-0%。在生產中提供來自 APIs 的縮小版 JSON,並保留列印精美的 JSON 僅用於本地開發和調試。
-
發送前驗證
在傳送至 API 或寫入設定檔之前,請務必透過驗證器執行 JSON。單一尾隨逗號或不帶引號的鍵將導致 JSON.parse() 拋出並破壞消費者。
-
使用格式化程式切換模式
將 JSON 貼到 JSON 格式化程式中,以美化讀取或縮小以便傳輸。該工具驗證語法並報告任何錯誤的確切位置,從而節省偵錯時間。
範例
印刷精美(2 個空格縮排)
輸入: {"id":1,"name":"Alice","active":true}
輸出: {
"id": 1,
"name": "Alice",
"active": true
}
縮小生產規模
輸入: {
"id": 1,
"name": "Alice"
}
輸出: {"id":1,"name":"Alice"}
按字母順序排序的鍵
輸入: {"zebra":1,"apple":2,"mango":3}
輸出: {"apple":2,"mango":3,"zebra":1}
常見問題
- 尾隨逗號:{"a":1,} 無效 JSON。大多數格式化程式都會刪除它們,但像 JSON.parse() 這樣的嚴格解析器將拒絕輸入。
- 單引號和不帶引號的鍵:{'a':1} 和 {a:1} 是有效的 JavaScript,但 JSON 無效。始終對鍵和字串值使用雙引號。
- JSON 中的註解:標準 JSON 不允許 // 或 /* */ 註解。如果需要內聯文檔,請使用 JSONC、JSON5 或單獨的架構文件。
- 混合縮排:混合製表符和空格會破壞 diff 工具,並可能導致「縮排不一致」lint 錯誤。在提交之前使用格式化程序進行標準化。
提示
- 將編輯器配置為在儲存時使用 2 個空格縮排格式化 JSON — 這可以防止程式碼審查中的樣式爭論。
- 對於 API 回應,設定 Content-Type: application/json; charset=utf-8 並透過 gzip/Brotli 壓縮提供縮小的 JSON 服務,以實現最大效率。
- 在快照測試中對 JSON 進行散列或比較時,使用確定性鍵排序(例如按字母順序)-隨機順序會導致誤報失敗。
- 當調試大型 JSON 有效負載時,首先對其進行漂亮列印,然後使用正規表示式或 jq 提取相關子樹,而不是透過肉眼掃描。