JSON差異對比

比較兩份JSON文件,按鍵路徑清晰列出新增、刪除和變化的鍵。遞迴遍歷物件與陣列,即使型別不一致也會作為變化列出。全部處理均在瀏覽器內完成,不會發送到伺服器。

什麼是JSON差異對比

JSON差異對比是將兩份JSON資料按結構逐一核對,清楚顯示哪些鍵被新增、哪些鍵被刪除、哪些值發生了變化的過程。當API響應規格變更或不同環境的設定檔存在差異,僅憑肉眼通篇比對文字已經難以承受資訊量時,這項功能尤其有用。本工具遞迴遍歷物件與陣列,按鍵路徑提取差異,即使JSON巢狀很深,也能精準定位到具體變化的位置。

需要注意的前提是,如果JSON本身的結構存在問題,就無法進行差異計算。若存在逗號缺失、引號未閉合等語法錯誤,工具會明確提示是A還是B的輸入有誤,並作為錯誤顯示,而不會嘗試計算差異。此外,本工具採用兩條不同的匹配規則:物件的鍵按名稱匹配,陣列的元素按索引(出現順序)匹配。理解這一前提,有助於正確解讀為什麼某個鍵會被判定為「變化」而不是「新增」或「刪除」。

JSON差異對比的使用方法

  1. 輸入來源JSON(A) 將JSON文字貼上或直接輸入到第一個輸入框中。可以直接複製現有的設定檔或API響應,無需額外整理格式。
  2. 輸入目標JSON(B) 將變更後或不同環境的JSON貼到另一個輸入框中。A與B的輸入順序會影響結果中「刪除」「新增」的方向。
  3. 載入示例了解效果(可選) 點選「載入示例」按鈕,兩個輸入框會自動填入包含新增、刪除、變化的示例資料,方便立刻了解顯示格式。
  4. 查看差異結果 刪除、新增、變化的鍵會連同鍵路徑一併列出。發生變化的鍵會並排顯示變化前後的值,可以當場讀懂差異內容。
  5. 按需清空輸入內容 點選「清空」按鈕可將兩個輸入框同時清空,開始比較另一組JSON資料。

用好本工具的小技巧

  • 鍵路徑以`user.address[0].city`這樣的點號/方括號形式顯示,即使JSON巢狀很深,也能立刻定位到具體是哪一層的值發生了變化。
  • 陣列按相同索引位置進行比較。請注意,僅僅調整陣列元素的順序也會被判定為所有元素都發生了變化。
  • 如果同一個鍵在一份文件中是字串,在另一份中卻是物件,這種型別不一致同樣會被記錄為變化,並原樣顯示兩邊的值。
  • 在比較部署前後的API響應時,建議先刪除時間戳、請求ID等每次都會變化的欄位,這樣才能只關注真正需要留意的差異。
  • 即使JSON中存在大量未發生變化的值,工具也只統計一致的葉子節點數量,避免結果過長而難以瀏覽。

應用場景

檢查API響應規格變更

在後端部署前後分別儲存API響應,用本工具進行比較,可以及早發現意外的欄位新增、刪除或型別變化。

比較不同環境的設定檔

比較預發布環境與正式環境的config.json或package.json內容,排查環境變數遺漏或版本不一致的問題。

程式碼審查時說明差異

在審查JSON格式的遷移資料或架構定義時,可以直接分享差異列表,無需口頭或在評論中逐條描述變更內容。

比較測試快照

將自動化測試輸出的JSON快照與預期值進行比較,快速定位導致測試失敗的具體欄位。

核對外部對接資料

將Webhook接收到的負載與示例JSON進行比較,驗證實際資料結構是否符合介面文件的規定。

術語表

鍵路徑
以`user.address[0].city`這樣的點號/方括號形式,表示從JSON根節點到某個具體值的路徑的字串。差異結果就是按這一單位顯示的。
巢狀
物件或陣列內部又包含物件或陣列的狀態。巢狀層級越深,僅憑肉眼比對就越困難。
葉子節點
在JSON樹狀結構中不再向下分支的末端值(字串、數字、布林值或null)。差異對比最終就是逐一核對葉子節點的值。
型別不一致
同一鍵路徑下的值,在一份文件中是字串,在另一份中卻是物件等不同資料型別的狀態。本工具也會將其記錄為「變化」。
語法錯誤
導致JSON.parse解析失敗的格式錯誤文字。逗號缺失、引號未閉合是典型例子。
JSONPath
用於查詢JSON內部值的一種查詢語言規範。本工具的鍵路徑寫法,可以理解為JSONPath部分語法的簡化版本。

常見問題

常用於比較部署前後的API響應,及時發現意外的變更,也可用於排查不同環境下配置檔案(如config.json)之間的差異。相比人工逐行比對,直接提取差異能大幅縮短確認時間。

可以。物件的鍵是按名稱進行匹配比較的,因此A和B中鍵的書寫順序不同並不影響差異檢測結果。工具只關心每個鍵是否存在及其值是否一致,而不關心文本中的排列順序。

陣列是按索引(第0個、第1個……)進行匹配比較的,因此即使元素內容相同,只要順序發生變化,對應索引位置的值就會被判定為"變化"。本工具不支援忽略順序的陣列比較。

不會。所有比較處理都在瀏覽器內的JavaScript中完成,輸入內容不會被發送到任何伺服器,即使響應中包含API金鑰或個人資訊,也可以放心比較。

如果JSON.parse解析失敗,會明確提示A或B哪一方格式有誤,並且不會進行差異計算。這有助於定位逗號缺失、引號未閉合等常見語法錯誤的位置。
工具君

閒話 ― CSV差異對比與JSON差異對比在鍵匹配思路上的不同

本站的CSV差異對比工具通過指定一個鍵列來識別行,並按行、按單元格進行比較。JSON並不具備行與列這種扁平結構,而是允許物件巢狀和陣列這類層級結構,因此雖然同樣叫"差異對比",底層的匹配演算法卻大不相同。本工具沒有"鍵列"這個概念,而是使用從根節點遞迴遍歷到葉子節點所構建的"鍵路徑"作為比較的基本單位。

陣列的處理是JSON差異檢測中尤為棘手的部分。CSV的行可以通過鍵列的值唯一確定,而JSON陣列元素並不保證具備任何識別符號。本工具採用簡單的按索引(出現順序)匹配的方式,這種設計更適合關注物件結構或原始值的變化(例如配置檔案或API響應的比較),而非適合追蹤陣列內容的增刪。

在實際工作中,持續整合(CI)流程中自動檢查REST API響應契約是否發生變化,也運用了類似的思路。本工具更看重在瀏覽器內即可完成的便捷性,但其思想與快照測試、契約測試(Contract Testing)是相通的——以機械化方式檢測JSON結構差異,是軟體開發各個環節中反覆出現的課題。