JSON 壓縮是什麼?什麼時候需要用?

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: gzip 或 br,Minify 的效益會大打折扣。可以先確認 HTTP Response Headers 中是否有 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。