繁體中文

開發者工具 · JSON 格式化程式和驗證程序

JSON 漂亮列印的工作原理:縮排、空格和按鍵順序

· 工作原理

json 開發人員工作流程 驗證

JSON 漂亮列印的工作原理:用 JSON 標記和精確的驗證邊界說明縮排、空格和按鍵順序
原始 ToolAcre 向量圖

漂亮列印只會改變無關緊要的空白,但人們擔心它會改變他們的資料。這篇文章解釋了格式化程式可以觸摸的內容、如何應用縮排深度以及按鍵順序會發生什麼。

相同的資料,三種不同的外觀

相同的資料,三種不同的外觀 - 緊湊的 API 有效負載可以佔用一行,在每個深度擴展兩個空格,或進一步擴展為四個空格。每個版本中的大括號、括號、名稱和值都描述相同的解析結構。僅結構標記之間的換行符和間距不同。在查看格式化程式輸出時,這種差異很重要:較大的差異不會自動導致資料更改,因為縮排故意更改許多位元組,同時保持結果值不變。

ToolAcre 提供兩個、四個或八個空格和一個製表符,然後將選定的縮排傳遞給 JSON.stringify。簡短的巢狀部署記錄使比較變得清晰:區域保持相同的陣列順序,布林值仍然是布林值,重試計數仍然是數字。

JSON 認為哪些空白不重要

JSON 認為哪些空格無關緊要 — RFC 8259 允許在結構字元之前或之後使用空格、水平製表符、換行符和回車符。因此,格式化程式可以在 `{` 之後放置一個換行符,在巢狀成員之前放置一個空格,並在 `}` 之前放置另一個換行符,而不更改該值。然而,空白並不是普遍可棄的。一旦雙引號開啟字串,每個普通空格都屬於該字串的內容,並必須在完全按照資料格式進行格式化後仍然存在。

最安全的心理模型是將標記邊界與字串內容分開。在冒號和數字之間,允許存在額外的空白。在引用訊息的字母之間,它是訊息。 ToolAcre 首先解析來源並序列化結果值,因此 JSON.stringify 選擇容器周圍的新空格,同時保留解碼的字串字元。

如何套用縮排設定

如何套用縮排設定 — 每個巢狀容器都會新增所選縮排單元的一份副本。頂層屬性從以下一層開始:其物件內的屬性開始兩個層級;陣列中的物件新增了另一個層級。右大括號和中括號返回到擁有它們的容器的縮排。因此,寬度反映了結構深度,而不是鍵、值或前一行的長度。

空間在每個編輯器中建立固定的視覺寬度,而分頁則允許每個檢視者選擇一個層級的顯示寬度。 JavaScript 也將 JSON.stringify 縮排限制為十個空格字符或所提供字串的前十個字符,儘管 ToolAcre 僅公開實用預設。

格式化是否會改變按鍵順序?

格式化是否會改變按鍵順序? - 普通的漂亮列印不會有意對物件成員進行排序。 JSON 物件在概念上是無序集合,但 JavaScript 解析和序列化使用定義的屬性枚舉規則。因此,大多數非整數鍵按其輸入順序出現,而類似整數的鍵可以在其他名稱之前發出。消費者永遠不應該將商業意義賦予成員位置,即使格式化程式似乎始終為熟悉的物件保留它。

ToolAcre 將縮排與排序分開。禁用排序後,它會直接序列化解析的物件。啟用排序後,它會在 JSON.stringify 執行之前遞歸地構造其鍵按字母順序排列的物件;數組保持其元素順序,因為重新排序數組會改變其含義。這個顯式選項做出了可審查的區別:僅空白輸出來自漂亮列印,而鍵順序差異來自請求規範組織。

解析和重新序列化格式化程式可以改變什麼

解析和重新序列化格式化程式可以改變什麼 - 解析後的值保留下來,但其原始拼字不會。寫入 `1.0` 的數字可能回傳為 `1`,而 `1e3` 可能回傳為 `1000`。轉義的可列印字元可以按字面重新出現,而當序列化需要時,字面字元可能會被轉義。重複的物件名稱在解析過程中已經折疊,因此只有最終的屬性值可供格式化程式使用。

這些轉換解釋了為什麼格式化輸出不應被視為保留位元組的檔案編輯器。當語意等價為目標時比較解析的值,當原始符號對簽章、雜湊或審核工作流程很重要時檢查文字差異。非常大的整數需要特別小心,因為 JavaScript 數字在序列化之前可能會失去精確度。

工作範例:格式化巢狀對象

工作範例:格式化巢狀物件 - 以 `{"service":{"regions":["sg","us"],"retry":{"count":3}}}` 開頭並選擇兩個空格。左根大括號後面跟著一個換行符號。 `service` 接收兩個前導空格,其子屬性接收四個,數組元素接收六個,嵌套的 `count` 屬性也接收六個。每個逗號結束一個呈現的成員,每個結束分隔符號與其開啟容器的縮排等級對齊。

將相同值切換到分頁僅更改每個等級使用的前綴。開啟鍵排序也可以將 `regions` 放置在 `retry` 之前,但陣列仍先讀取 `sg`,然後讀取 `us`。有用的審查分兩次檢查輸出:首先確認巢狀和陣列順序代表原始值,然後確定所選的空白是否適合儲存庫。

這不包括什麼

這不包括什麼 - 鍵排序是一個單獨的規範化選擇,而縮小是相反的表示操作。漂亮列印也永遠不會授予重新排序數組的權限:數組位置是資料,因此更改它可以改變優先順序、時間順序或程式行為。縮排也不會使無效源在解析之前變得有效。註解、尾隨逗號和僅 JavaScript 值必須由解析器針對其實際格式進行修正或處理,然後嚴格的 JSON 格式化程式才能序列化它們。

規格 JSON 方案比普通格式更進一步,它定義了精確的成員排序、數字拼字以及簽章或確定性雜湊的轉義。 ToolAcre 並不聲稱實施這樣的規範化標準。它使用 JSON.parse 和 JSON.stringify 產生可讀的瀏覽器本地輸出,並具有可選的遞歸鍵排序。

重點:漂亮列印是一種空白轉換

重點:漂亮列印是一種空白轉換-其目的是在不改變表示值的情況下公開結構。縮排寬度影響可讀性、審查雜訊和本地約定,而不影響 JSON 有效性。字串內的空格仍然是資料,數組順序仍然很重要,並物件鍵排序需要單獨的明確選擇。記住這些邊界可以使格式化程式差異更容易評估,並防止外觀變更與語義編輯混淆。

解析和重新序列化工具仍然可以規範數字和轉義拼寫,因為它根據值而不是原始標記文字工作。當詞彙保真度很重要時,請檢查這些情況,並避免使用普通的漂亮輸出作為簽名的規範形式。對於日常配置和 API 檢查,選擇您的團隊使用的縮進,除非需要,否則保留排序,本地格式化並驗證發出的文字。