在兩側都貼上 JSON 即可開始比較。
工具說明
關於 JSON 結構化差異比對
JSON diff 工具會依結構而非依文字來比對兩份文件,因此你看到的是資料本身的變化,而不是排版格式的變化。
把原始的 JSON 貼在一邊、修改後的 JSON 貼在另一邊,比對結果會立刻更新成一張表格,列出新增、移除與變更的值,以及每一項所在的路徑。
如何使用 JSON Diff 工具
- 把原始文件貼進第一個輸入框,修改後的文件貼進第二個。
- 看上方以 +N -N ~N 呈現的統計數字,就能掌握這次變動的規模。
- 瀏覽結果表格:變更類型、路徑、變更前的值、變更後的值。
- 循著像 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 是不同的值,會被回報為一項變更。