跳至主要內容
Lizely

JSON 縮減工具

將嚴格的 JSON 轉為緊湊的 JSON.parse 與 JSON.stringify 結果,並明確拒絕重複鍵值與不安全的數值重寫。

隱私權:你的檔案不會離開裝置,所有處理均在瀏覽器本機完成。

使用方式

  1. 1.貼上一個嚴格的 JSON 值並檢視顯示的輸入字元數。
  2. 2.縮減它;修正任何嚴格語法、重複鍵、不安全數值、巢狀或預算錯誤。
  3. 3.確認緊湊輸出與減少總數摘要,然後複製完整的縮減 JSON。

關於JSON 縮減工具

JSON 縮減工具可將有效的嚴格 JSON 轉為 JSON.parse 之後再經 JSON.stringify 產生的緊湊文字。貼上物件、陣列、字串、數值、布林值或 null,選擇「縮減 JSON」,檢視字元減少數量,並複製結果。解析、驗證、序列化、顯示與複製皆在當前瀏覽器標籤中完成。輸入內容不會上傳至 Lizely 或傳送至任何 API。此工具對於需要緊湊格式的 API 固定值、設定片段、請求體、內嵌範例、日誌、測試案例與傳輸載荷特別有用,因為這些情境中通常不需要普通格式的空白字元。

此工具刻意設計為 JSON 解析器與序列化器,而非正規表示式空白字元移除工具。在 JSON 中,字串外的空白與換行字元無關緊要,可被移除。字串內的空白、製表符(由轉義表示)、標點符號與換行轉義則為資料的一部分,必須保留在解碼結果中。先解析可確保大括號、方括號、逗號、冒號、引號、轉義、字面值與數值符合語法規則。JSON.stringify 會產生一個緊湊的表示方式,無任何縮排。物件成員插入順序遵循 JavaScript 解析與序列化行為。陣列順序則保持不變。

僅接受嚴格的 JSON。JavaScript 物件字面量與 JSON5 是不同格式。單引號字串、未引號的屬性名、註解、尾隨逗號、十六進位數、正號前導、Infinity、NaN、undefined、函式與稀疏陣列語法皆被拒絕。此工具不會靜默移除註解、引號屬性、修正逗號,或將 JavaScript 語法轉換為 JSON。有效的頂層值不一定要是物件或陣列;字串、數值、布林值與 null 皆符合 RFC 8259 的 JSON 字串規範。

重複的物件名稱需要特別處理,因為一般 JSON.parse 會保留最後一個值並捨棄較早的值。RFC 8259 警告,非唯一名稱的行為在不同實作間可能不穩定。在解析前,此工具會遍歷 JSON 結構,解碼每個物件的鍵值,並拒絕同一物件內的重複鍵。比較是在轉義解碼後進行,因此以 a 寫成的鍵與使用 Unicode 轉義寫成的鍵視為重複。相同鍵名仍可能出現在不同巢狀物件中,因為這些屬於獨立的成員作用域。拒絕是明確的,以防止縮減過程隱藏「最後鍵優先」的資料變更。

JavaScript 數值也需明確的邊界限制。JSON 允許任意位數的數值字面量,而 JavaScript 使用雙精度浮點數值。純數值大整數在 JSON.parse 時可能被四捨五入,並以不同值序列化。此工具拒絕所有超出 Number.isSafeInteger 的解析整數,包括整數型的十進位或指數形式。正確的安全範圍會被接受。非有限的溢位值(如 1e400)會被拒絕,否則 JSON.stringify 可能會在某些流程中產生錯誤的 null。非零數值若溢位至 JavaScript 零也會被拒絕。這些檢查可防止最嚴重的靜默數值變更。

支援範圍內的有限小數值仍使用標準 ECMAScript 數值語意。JSON.stringify 可選擇使用標準小數或指數表示法,例如將 -12.5e+2 轉為 -1250。這僅是相同 JavaScript 數值的表示方式改變,並非字面保留。若精確的任意精度小數表示或極大識別碼重要,應將該值以 JSON 字串形式編碼,或使用專門的任意精度系統。此工具不保留數值字元的位元組,亦不聲稱在宣告的安全範圍外具有無損處理能力。

輸入上限恰為 1,000,000 個 UTF-16 程式碼單元,輸出也有獨立的 1,000,000 個程式碼單元上限。剛好位於邊界的內容可接受,再多一個字元就會遭到拒絕。任何內容都不會在未告知的情況下遭到截斷、抽樣、僅部分解析或僅部分傳回。由於格式空白會被移除,輸出通常不會比輸入長,但獨立的輸出檢查可讓這項限制明確可見。執行 JSON.parse 前,巢狀深度最多為 256 層,以免面對惡意或意外產生的極深層輸入時,預先檢查工作出現不受控制的遞迴。

預先檢查器僅識別 JSON 的空白字元:空格、水平製表符、換行與歸位字元。它會追蹤字串與轉義,因此字串內的花括號或逗號不會影響結構。每個物件會獲得獨立的解碼鍵集。數值字元會在原生解析前檢查是否為有限範圍、安全整數行為與溢位。原生 JSON.parse 仍是最終語法權威,原生 JSON.stringify 會產生顯示的緊湊文字。這種層次設計避免了自創 JSON 實作,同時增加了原生重複鍵行為無法提供的保護。

編輯輸入會立即移除舊結果、錯誤、減少總數摘要與複製狀態。解析失敗不會留下先前成功的輸出。複製操作為非同步且受保護,若輸入在複製期間改變,則遲到的承諾無法發布「已複製」訊息。若複製被拒絕,輸出仍可見以供手動選擇。清理操作在解除安裝時會取消狀態計時器。

縮減不會驗證應用專屬的模式、排序物件鍵、移除欄位、去重陣列、清除機密、使用 gzip 壓縮、將 JSON 轉為 JavaScript,或讓不受信賴的資料可執行。字元數減少不表示語意上的合適性,適用於 API。複製輸出至其他系統前,請審查憑證與個人資料。若需要可讀的縮排,請使用 JSON 格式化工具。僅需語法診斷時,請使用 JSON 驗證工具。需要表格轉換時,請使用 JSON 至 CSV,反向表格流程則使用 CSV 至 JSON。

方法與來源

拒絕空值輸入或超過 1,000,000 UTF-16 字元的內容。一個有邊界限制的遞迴掃描器會追蹤嚴格的 JSON 字串、陣列、物件、字面量與數值標記,最多支援 256 層級的巢狀。它會解碼物件名稱,並針對物件內重複的名稱進行拒絕,包含轉義等價的名稱。對於非有限數值、非零下溢至零、所有超出 Number.isSafeInteger 範圍的整數型數值,以及其精確的 base-10 表示與解析出的 Number 最短 JSON.stringify 拼寫不一致的十進位標記,一律拒絕;數值等效的拼寫則仍被接受。原生 JSON.parse 提供最終的嚴格語法驗證,而 JSON.stringify 會輸出壓縮格式的表示,不帶縮排。若輸出超過 1,000,000 字元,將直接拒絕且不截斷。編輯操作會清除舊的輸出與錯誤訊息;剪貼簿產生與掛載保護機制可防止狀態滯留。

常見問題

JSON 縮減工具是否支援 JSON5 或 JavaScript 物件字面量?
不。註解、尾隨逗號、單引號、未引號鍵、NaN、Infinity、undefined 與其他非 JSON 語法皆被拒絕,而非被修復。
當一個物件包含相同的鍵兩次時會發生什麼?
此工具會明確拒絕,包括轉義等效的名稱。原生 JSON.parse 只會保留最後一個值,這可能在縮減過程中隱藏資料變更。
對精確敏感的 JSON 數值如何處理?
此工具拒絕不安全的整數、非有限的溢位、非零的溢位以及在 JavaScript 數值解析後其精確的底層 10 值會改變的十進位字元。等效的寫法如 1.2300 到 1.23 仍被允許;若需要任意精度,請使用引號字串。
我的 JSON 會被上傳或儲存嗎?
不會。預先檢查、JSON.parse、JSON.stringify、輸出顯示與複製皆在當前瀏覽器標籤中執行。

開發者工具 使用指南

查看全部