JSON 結構化差異比對

依結構而非文字比較兩份 JSON 文件

結構化比較:忽略鍵順序與縮排
原始 JSON
變動後的 JSON
差異
在兩側都貼上 JSON 即可開始比較。

工具說明

關於 JSON 結構化差異比對

JSON diff 工具會依結構而非依文字來比對兩份文件,因此你看到的是資料本身的變化,而不是排版格式的變化。

把原始的 JSON 貼在一邊、修改後的 JSON 貼在另一邊,比對結果會立刻更新成一張表格,列出新增、移除與變更的值,以及每一項所在的路徑。

如何使用 JSON Diff 工具

  1. 把原始文件貼進第一個輸入框,修改後的文件貼進第二個。
  2. 看上方以 +N -N ~N 呈現的統計數字,就能掌握這次變動的規模。
  3. 瀏覽結果表格:變更類型、路徑、變更前的值、變更後的值。
  4. 循著像 a.b[2] 這樣的路徑回到你的原始檔;鍵以點號銜接,陣列則使用索引。

什麼時候會用到

  • 比對兩個環境之間的設定,例如把測試環境的 JSON 設定拿來對照正式環境。
  • 在你依賴新的資料結構之前,先審視 API 回應在兩個服務版本之間有何變化。
  • 追查 package-lock.json 或其他自動產生的相依性清單裡,究竟哪些內容真的動了。
  • 檢查某個工具在重新序列化基礎設施即程式碼檔案或 Kubernetes 資源檔之後,改了些什麼。

路徑與變更類型怎麼呈現

每一列都指向文件中的一個位置,寫法比照你在程式裡讀取該值的方式,方便在原始檔中找到它。

  • 新增:該路徑只存在於修改後的文件中,變更後欄位會顯示新的值。
  • 移除:該路徑只存在於原始文件中,變更前欄位會顯示原本的內容。
  • 變更:該路徑在兩邊都存在但值不同,因此兩個欄位都會填上。
  • 像 a.b[2] 這樣的路徑,代表物件 a 之中的鍵 b,再取該陣列索引 2 的元素。

JSON 比對常見問題

為什麼重新排版檔案之後比不出任何差異?
因為兩邊都會先經過剖析。縮排、鍵的順序與換行字元都不屬於剖析後的結構,所以永遠不會被列為差異。
為什麼在陣列中插入一個元素,後面全部都被標成變更?
陣列是按索引比對的。插入會使其後每個元素移到新的位置,於是每個位移過的位置都被回報為變更。這是位置式比對本身的侷限,不是缺陷。
如果其中一邊不是合法的 JSON 會怎樣?
兩邊的輸入都必須成功剖析。只要任一邊格式有誤,畫面就會顯示剖析錯誤而不是比對結果。
兩份文件完全一致時會顯示什麼?
工具會明確指出兩者沒有結構性差異,而不是留下一個看起來像失敗的空白結果。
我的資料會被上傳到哪裡嗎?
不會。剖析與比對都是在你的瀏覽器中透過 microdiff 函式庫在本機執行,你貼上的內容不會送往 wetool.site 或任何其他伺服器。

JSON diff 與純文字 diff 的差別

文字 diff 比對的是一行行字元,所以鍵的順序調換、縮排從兩格改成四格、換行字元不同,全都會被當成差異,即使資料完全相同,真正的修改也被淹沒在這些雜訊裡。JSON diff 會先剖析兩份文件,只回報語意上的差異,因此鍵的順序與排版都被忽略。當確切位元組很重要時用文字 diff,只在乎資料時就用這一個。

讀結果時別被誤導

結構比對能精準回答一個很窄的問題,因此有必要知道這張表格說了什麼、又沒說什麼。

  • 一大串變更集中在同一個陣列裡,通常代表只是一次插入或一次重排,而不是許多筆各自獨立的修改。
  • 型別是有分別的:字串 1 和數字 1 是不同的值,會被回報為一項變更。