JSON 是目前最普遍的資料交換格式,幾乎每個 API、每個前後端溝通都在用。但你有沒有想過:JSON 格式化之後因為縮排和換行而變得很長,這些「留白」真的必要嗎?這就是 JSON 壓縮(Minify)要解決的問題。
1. JSON 壓縮是什麼?
JSON 壓縮,英文稱為 Minify 或 Compact,指的是把 JSON 文字中所有對機器解析無意義的字元全部刪除,包括:
- 縮排用的空格與 Tab
- 鍵值對之間的換行
- 冒號與逗號前後多餘的空白
例如,下面這段格式化後的 JSON:
{
"name": "Alice",
"age": 30,
"active": true
}
壓縮後會變成:
{"name":"Alice","age":30,"active":true}
資料內容完全一樣,但體積大幅縮小。
2. 壓縮後的 JSON 還是合法的嗎?
是的。JSON 規格(RFC 8259)本身允許空白字元(空格、Tab、換行、回車)出現在語法結構之間,但這些空白不影響資料的語義。也就是說,有沒有縮排、有沒有換行,對 JSON 解析器來說完全一樣。壓縮後的 JSON 和格式化版本在語法上是完全等價的。
3. 什麼時候應該使用 JSON 壓縮?
並非所有場合都要壓縮 JSON,以下幾種情境才是真正有價值的時機:
API 回應與網路傳輸
當後端 API 需要傳送大量資料給前端或行動 App 時,壓縮 JSON 可以明顯減少傳輸的 bytes 數量。在行動網路或低速連線下,效果尤其明顯。如果 API 每秒有上萬次呼叫,每次省下幾 KB 累積下來是相當可觀的流量節省。
靜態 JSON 設定檔打包
前端專案(如 React、Vue)在正式建置(build)時,通常會把 JSON 格式的設定或語system系資料一併打包進去。建置工具會自動對這些 JSON 做壓縮,以縮小最終產出的檔案大小。
localStorage 與 Cookie 儲存
瀏覽器 localStorage 有容量上限(通常是 5MB),Cookie 的限制更嚴(約 4KB)。如果你需要把一個複雜物件序列化後儲存,壓縮成緊湊格式可以讓你塞進更多內容。
資料庫欄位儲存
如果系統會把 JSON 存入資料庫的 TEXT 欄位,壓縮可以減少儲存空間,也能避免欄位長度限制。
4. 什麼時候不應該壓縮 JSON?
壓縮雖然有好處,但也有不適合的場合:
- 開發與除錯階段:壓縮後的 JSON 幾乎不可讀,遇到問題很難手動排查。開發環境通常會刻意保留格式化版本。
- 設定或翻譯檔由人工維護:如果你的 JSON 需要開發者手動修改,保持可讀性更重要。
- 已啟用 HTTP 壓縮(gzip/Brotli):主流 Web 伺服器通常會在傳輸時自動對文字類型做 gzip 或 Brotli 壓縮,此時 JSON 壓縮的效益就不那麼顯著了。重複的空白字元在 gzip 之後幾乎不佔空間。
Content-Encoding,再評估是否值得額外做 JSON 壓縮。
5. JSON 壓縮和 JSON 格式化是相反的操作嗎?
可以這樣理解。JSON 格式化(Prettify / Beautify)是把緊湊的 JSON 展開,加上縮排和換行,讓人更容易閱讀;JSON 壓縮(Minify / Compact)則是把格式化的版本還原成緊湊形式。兩者都是對同一份資料做「視覺呈現」上的調整,不改變資料本身的值。
一些工具(包含本站的 JSON 格式化工具)同時提供這兩種功能,可以根據使用場景切換。
6. 壓縮 JSON 有沒有安全疑慮?
壓縮本身不會改變資料內容,所以不會引入額外的安全問題。但要注意幾點:
- 壓縮不等於加密,JSON 壓縮後的文字仍然是明文,任何人都能直接閱讀。
- 如果 JSON 中含有敏感資訊(如 Token、密碼),壓縮後傳輸前應先確保使用 HTTPS。
- 使用線上工具壓縮含機敏資料的 JSON 時,要注意該工具有沒有把資料傳送到第三方伺服器。
結語
JSON 壓縮是一個簡單卻實用的小技巧。它不改變資料的意義,只是移除對機器來說多餘的空白字元,達到節省傳輸量和儲存空間的效果。在 API 傳輸、靜態資源打包、瀏覽器儲存等場景下都很有用。但如果伺服器已有 gzip 壓縮,或者 JSON 是需要人工維護的設定檔,就不一定需要特地做 Minify。