JSON差異對比
比較兩份JSON文件,按鍵路徑清晰列出新增、刪除和變化的鍵。遞迴遍歷物件與陣列,即使型別不一致也會作為變化列出。全部處理均在瀏覽器內完成,不會發送到伺服器。
使用技巧
- 鍵路徑以`user.address[0].city`這樣的點號/方括號形式顯示,即使JSON巢狀很深,也能立刻定位到具體是哪一層的值發生了變化。
- 陣列按相同索引位置進行比較。請注意,僅僅調整陣列元素的順序也會被判定為所有元素都發生了變化。
- 如果同一個鍵在一份文件中是字串,在另一份中卻是物件,這種型別不一致同樣會被記錄為變化,並原樣顯示兩邊的值。
- 在比較部署前後的API響應時,建議先刪除時間戳、請求ID等每次都會變化的欄位,這樣才能只關注真正需要留意的差異。
- 即使JSON中存在大量未發生變化的值,工具也只統計一致的葉子節點數量,避免結果過長而難以瀏覽。
常見問題
常用於比較部署前後的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結構差異,是軟體開發各個環節中反覆出現的課題。