Command Palette

Search for a command to run...

JSON 小型化器:在不更改資料的情況下將 JSON 縮小到最小的有效形式

JSON 小型化器:在不更改資料的情況下將 JSON 縮小到最小的有效形式

T
Toolz Team
|Aug 23, 2026|15 閱讀

縮小和美化 合集的一部分

第一次縮小 JSON 對我來說實際上很重要,不是在網站上 - 是在微控制器上。我正在將一個配置塊運送到一個需要幾千位元組記憶體的設備,而我手工編輯的漂亮列印版本幾乎是相同資料大小的兩倍,並刪除了空白。相同的按鍵、相同的值、相同的結構 - 唯一的區別是純粹為了人類可以讀取而存在的數千個空格和換行符。剝離這些並調整有效負載。這就是縮小背後的全部技巧,它適用於每天提供一百萬次的 API 回應,就像適用於壓縮到晶片上的設定檔一樣。

本指南是圍繞免費內容構建的如何以及為何縮小 JSON 的完整版本 JSON 小型化器 工具。我將解釋什麼縮小刪除了,它故意留下了什麼,為什麼較小的JSON 更快,縮小與格式化和轉義有何不同,以及一個微妙的屬性- 數字精度- 將仔細的縮小與粗心的縮小區分開來。它是同一家族的一部分 json 格式化程式 我用於相反的工作,它屬於我在 中列出的工具包 JSON 工具終極指南.

TL;DR: 縮小 JSON 會刪除標記之間的每個空格、製表符和換行符,產生解析到完全相同資料的最小文字。關於鍵、值或其順序的任何內容都不會改變 - 只有空格才會改變。這 JSON 小型化器 首先驗證您的輸入並報告解析器'如果格式錯誤,則會出現精確錯誤,僅刪除字串文字外部的空白,以便值內的文字不受影響,並保留位元組的數字標記字節,以便像 1.0 這樣的值保持 1.0。美化模式會以 2 個空格、4 個空格或選項卡反轉該過程。一切都在您的瀏覽器中運行。

縮小 JSON 實際上有什麼作用?

JSON 文件是一系列標記 - 大括號、括號、冒號、逗號、字串、數字和文字 true, false, 和 null. 在這些標記之間,JSON 語法允許任意數量的空格,而印刷精美的JSON 大量使用該餘裕:每個逗號後面有一個換行符,每個嵌套級別有兩個或四個縮進空格,每個冒號後面有一個空格。所有這些空格都供人眼使用。解析器完全忽略它。

縮小化是刪除每一個無關緊要的空白字元的行為,只留下標記本身和語法所需的最小標點符號。讀取為四十條縮排行的配置會折疊成一條密集行。至關重要的是, 數據 是相同的 - 解析縮小版本和漂亮版本,您會得到完全相同的對象,具有相同的鍵、相同的順序和相同的值。縮小改變了表示,而不是意義。這一切所依賴的語法被發佈為 RFC 8259,這是微不足道的空白和不重要的空白的權威。

一處空白是 不是 字串內無關緊要。中的空間 "hello world" 是值的一部分,必須保持不變。因此,正確的縮小器不能簡單地刪除文字中的每個空格;它必須追蹤它是否位於字串文字內,並且不保留該內容。這 JSON 小型化器 正是這樣做的,逐個字元地遍歷文本,並且只刪除位於標記之間的空白,因此您的值之一內永遠不會丟失故意的空間。

為什麼要費心去縮小 JSON?

主要原因是大小,而大小直接轉化為網路上的速度和成本。 JSON 回應的每個位元組都必須透過網路傳輸,對於請求數千或數百萬次的有效負載,空白加起來就是實際頻寬。縮排和換行符號通常佔列印精美文件的五分之一到三分之一' ss size,因此縮小可以從每次傳輸中切出有意義的部分。較小的回應到達得更快,尤其是在行動連線速度較慢的情況下,而且當您支付出口費用時,它們的服務成本更低。這就是為什麼幾乎每個生產 API 都會傳回縮小的 JSON,並且每個將資料捆綁到 Web 應用程式中的建置工具都會先將其縮小。

解析也有好處,儘管它較小。不必跳過空白運行的解析器需要做的工作稍微少一些,這對於在熱循環中處理的非常大的文檔來說很重要。首先,有一個儲存角度讓我來到這裡:當您將 JSON 擬合到受限空間時 - 具有大小限制的 cookie、嵌入式設備、帶上限的資料庫列、URL 查詢參數 - 縮小的形式就是它的用途。工具中的節省大小的徽章會向您顯示前後的位元組數和百分比減少,以便您可以立即看到給定文檔是否值得縮減或已經精簡。

縮小化有什麼作用 不是 買你就是重量級意義上的保密或壓縮。 Minified JSON 仍然是純文本,並且對於任何解析它的人來說仍然可以完美閱讀;刪除空白不是加密,也不是 gzip。在線上,JSON 通常在縮小之上進行 gzip 壓縮,兩者是互補的 - 縮小消除了語法允許的冗餘,gzip 消除了位元組流中的冗餘。 Minify 是出於上述原因,而不是因為您認為它隱藏了任何東西。

微縮化與格式化、轉義和壓縮有何不同?

這四個操作不斷變得混亂,保持它們筆直可以防止您找到錯誤的工具。他們針對不同的事情採取行動並解決不同的問題。

縮小化 刪除微不足道的空白以使文件更小,同時保持其有效的 JSON。 格式化(或美化)則相反:它添加縮排和換行符以使文件可讀,這就是您在調試 API 回應或手動編輯配置時想要的。這 JSON 小型化器 兩者都這樣做,因為它們是同一軸的兩個方向 - 機器縮小,人美化。 逃跑 完全不同的軸:它使一大塊文字可以安全放置 裡面 透過將引號和控製字元轉換為反斜線序列來建立 JSON 字串,這是 的工作 JSON 逃生/逃避 工具。和 壓縮 就像 gzip 對 JSON 層下方的原始位元組進行操作一樣,在縮小完成其部分後進一步縮小傳輸。

表格列出了每個工具的區別和要點。

操作 它改變了什麼 結果還是JSON? 工具
縮小 刪除令牌之間的空格 是的,相同的數據 JSON 小型化器
美化/格式 新增縮排和換行符 是的,相同的數據 json 格式化程式
逃脫 對文字進行編碼以位於 JSON 字串內 它變成一個字串值 JSON 逃生/逃避
縮小 CSS 從樣式表中刪除空白 這是 CSS,而不是 JSON CSS 縮小器
縮小 HTML 從標記中刪除空白 它是 HTML,而不是 JSON HTML 縮小器

同樣的小型化運輸想法也跨越格式,這就是原因 CSS 縮小器HTML 縮小器 坐在這個旁邊 - 出於相同的頻寬原因,完整的建置會最小化 JSON 資料、樣式表和標記。

縮小 JSON 會改變我的資料嗎?

正確的答案是縮小應該 從來沒有 改變你的數據,一個好的工具可以保證它。但有一個微妙之處,將仔細的縮小器與樸素的縮小器區分開來,它值得理解,因為它會咬你。

許多小型化器的工作原理是將 JSON 解析為記憶體中的對象,然後將其重新序列化,無需空格。往返很方便,但這意味著每個值都會通過語言'路上的數字類型,這可以重寫數字的方式 寫的 即使數學值不變。你寫成的一個值 1.0 回來時為 1. 諸如此類的值 1e3 回來時為 1000. 數字多於語言的整數' s 數字類型可以精確保存 - 任何超過大約 16 個有效數字的數字 - 都可以巧妙地更改回來。對於大多數文檔,這些都不重要,但如果您的 JSON 攜帶版本字串、資料庫識別碼或固定精度小數作為數字,則重新解析和重新限制的小詞可以悄悄地損壞它們。

JSON 小型化器 透過以不同的方式縮小來避免陷阱。它仍然 驗證 透過解析來輸入,因此格式錯誤的 JSON 會被捕獲並報告。但要產生輸出,它會直接從原始文字中剝離空白,而不是重新序列化解析對象,這意味著每個數字令牌都完全按照您編寫的方式保留。尾隨零 1.0 留下來 1.0;三十位數的整數保留所有三十位數字。您可以減少縮小尺寸,而不會有任何數字被重寫的風險 - 最好的驗證和位元組對位元組的保真度。美化方向是關於可讀性而不是傳輸,確實透過標準的重新序列化來標準化格式,這是您重新格式化以供人類閱讀時的預期行為。

當我的 JSON 無法縮小時,如何讀取錯誤?

該工具在縮小之前進行驗證,這意味著格式錯誤的文件會產生錯誤而不是損壞的輸出 - 並且該錯誤是一個功能,而不是障礙。它告訴您 JSON 有一個真正的問題 之前 你把它運送到一個拒絕它的地方,效果會不那麼好。

這些訊息直接來自 JavaScript JSON 解析器,通常會命名位置。最常見的原因是數組或物件的最後一個元素後面有一個尾隨逗號,這是嚴格的 JSON 禁止的;未用雙引號括起來的鍵,因為 JSON 需要引號,這與 JavaScript 物件文字不同;使用單引號而不是雙引號的字串;以及不平衡的括號或大括號,其中某些內容已開啟但未關閉。一旦您知道要查看哪裡,每個問題都是一個小修復,並且報告的位置將您指向附近。如果您的來源實際上是 JSONC - JSON,帶有註解和後引號,如某些設定檔中使用的那樣 - 它不會按原樣縮小,因為這些是擴展而不是標準 JSON;首先刪除註釋和後引號,或轉換為嚴格的 JSON,它將進行驗證。

當結構有效但你看不到時 為什麼 兩個文件的行為不同,美化並比較它們,或將它們貫穿其中 JSON 差異 準確查看哪些鍵或值不同的工具。調試 JSON 在其漂亮的形式中要容易得多,這是我製作的日常案例 JSON 格式化程式指南。 由於所有這些驗證和縮小都發生在您的瀏覽器中,沒有上傳任何內容,因此您可以安全地貼上包含API 金鑰、令牌或客戶記錄的有效負載- 我在其中完整列出了隱私參數 線上工具的資料隱私指南.

一個可行的範例:從可讀配置到已傳送的有效負載

這是顯示該工具贏得其位置的往返。假設您一直在手動編輯服務配置,因此為了可讀性,它列印得很好 - 物件鍵位於自己的行上,兩個空間縮排,易於掃描的空白結構。在進入有長度限制的環境變數之前,您希望它盡可能小。

將配置貼到 JSON 小型化器,按一下 Minify,它就會折疊成一行。大小徽章可能會讀出 512 位元組到 340 的內容,減少三分之一,這是擬合變數和#39 之間的差異;限制而不是。將縮小的行直接複製到您的環境檔案中。請注意,您寫的是超時 1.5 仍然 1.5 並重試計數 3 仍然 3 - 數字未受影響,如果您有一個長數字標識符,它也將完好無損地保存下來,因為該工具剝離了空白而不是重新標記值。

幾週後,一份錯誤報告讓你盯著日誌中的同一個縮小斑點,它作為一條密集線是無法讀取的。將其貼回工具中,按一下美化,選擇兩個空格,然後將其擴展為您可以實際掃描的縮排形式。修復該值,再次縮小,再次發貨。雙向流程 - 美化讀取和編輯,縮小儲存和發送 - 是日常節奏,並且將兩者放在一個位置,並帶有大小讀出和精確的錯誤報告,這使得它變得快速。對於更廣泛的建造和運輸實用程式來說,它位於其中 web 開發人員工具包 剩下的就四捨五入了。

常見問題

如何在線縮小 JSON? 將 JSON 貼到輸入區域並按一下 Minify。該工具刪除了字串值之外的所有空格,並顯示壓縮結果以及大小節省。所有內容都在您的瀏覽器中運行,因此不會上傳任何內容。

縮小 JSON 會改變資料嗎? 不,縮小僅刪除令牌之間的空格,因此鍵、值及其順序保持相同。縮小的文件解析為與原始漂亮列印的物件或陣列完全相同的物件或陣列。

為什麼要縮小 JSON? 小型化的 JSON 較小,因此它透過網路傳輸速度更快,使用的頻寬更少,解析速度也稍快。由於這些原因,API 回應、設定檔和捆綁到 Web 應用程式中的資料通常在生產中被縮小。

該工具是否保留 1.0 或大整數等數字格式? 是的。因為它會剝離空白而不是重新解析值,所以數字標記會完全按照您編寫的方式保留。像 1.0 這樣的值保留 1.0,並且一個非常大的整數保留其所有數字,解析和重新限制小詞會重寫這些數字。

縮小和美化JSON有什麼不同? 縮小刪除空白,使 JSON 對機器來說盡可能小,而美化則增加了縮排和換行符,使其可供人們閱讀。此工具既可以:縮小用於運輸,美化用於編輯和調試。

它可以用註解或尾隨逗號來縮小 JSON 嗎? 標準 JSON 不允許註釋或尾隨逗號,因此該工具在驗證過程中將這些內容報告為錯誤。首先刪除註解和後置逗號,或將 JSONC 轉換為嚴格的 JSON,然後縮小。

在這裡縮小敏感的 JSON 安全嗎? 是的。所有處理都在瀏覽器內的 JavaScript 中進行,因此不會將 JSON 傳送到任何伺服器,不會記錄任何內容,並且該工具可以在停用連線的情況下運作。您可以安全地縮小包含 API 金鑰或個人資料的有效負載。

為什麼我的 JSON 顯示錯誤而不是縮小? 該工具在縮小之前驗證您的輸入,因此錯誤意味著 JSON 格式錯誤,通常是缺少或額外的逗號、未引用的鍵、單引用的字串或不平衡的括號。該訊息包含問題的位置,以便您可以修復它。


本指南附贈免費 JSON 小型化器 toolz。dev 上的工具 - 無需註冊、無需上傳、離線工作。

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!