JSON差異對比
比較兩份JSON文件,按鍵路徑清晰列出新增、刪除和變化的鍵。遞迴遍歷物件與陣列,即使型別不一致也會作為變化列出。全部處理均在瀏覽器內完成,不會發送到伺服器。
什麼是JSON差異對比
JSON差異對比是將兩份JSON資料按結構逐一核對,清楚顯示哪些鍵被新增、哪些鍵被刪除、哪些值發生了變化的過程。當API響應規格變更或不同環境的設定檔存在差異,僅憑肉眼通篇比對文字已經難以承受資訊量時,這項功能尤其有用。本工具遞迴遍歷物件與陣列,按鍵路徑提取差異,即使JSON巢狀很深,也能精準定位到具體變化的位置。
需要注意的前提是,如果JSON本身的結構存在問題,就無法進行差異計算。若存在逗號缺失、引號未閉合等語法錯誤,工具會明確提示是A還是B的輸入有誤,並作為錯誤顯示,而不會嘗試計算差異。此外,本工具採用兩條不同的匹配規則:物件的鍵按名稱匹配,陣列的元素按索引(出現順序)匹配。理解這一前提,有助於正確解讀為什麼某個鍵會被判定為「變化」而不是「新增」或「刪除」。
JSON差異對比的使用方法
- 輸入來源JSON(A) 將JSON文字貼上或直接輸入到第一個輸入框中。可以直接複製現有的設定檔或API響應,無需額外整理格式。
- 輸入目標JSON(B) 將變更後或不同環境的JSON貼到另一個輸入框中。A與B的輸入順序會影響結果中「刪除」「新增」的方向。
- 載入示例了解效果(可選) 點選「載入示例」按鈕,兩個輸入框會自動填入包含新增、刪除、變化的示例資料,方便立刻了解顯示格式。
- 查看差異結果 刪除、新增、變化的鍵會連同鍵路徑一併列出。發生變化的鍵會並排顯示變化前後的值,可以當場讀懂差異內容。
- 按需清空輸入內容 點選「清空」按鈕可將兩個輸入框同時清空,開始比較另一組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部分語法的簡化版本。
常見問題
閒話 ― CSV差異對比與JSON差異對比在鍵匹配思路上的不同
本站的CSV差異對比工具通過指定一個鍵列來識別行,並按行、按單元格進行比較。JSON並不具備行與列這種扁平結構,而是允許物件巢狀和陣列這類層級結構,因此雖然同樣叫"差異對比",底層的匹配演算法卻大不相同。本工具沒有"鍵列"這個概念,而是使用從根節點遞迴遍歷到葉子節點所構建的"鍵路徑"作為比較的基本單位。
陣列的處理是JSON差異檢測中尤為棘手的部分。CSV的行可以通過鍵列的值唯一確定,而JSON陣列元素並不保證具備任何識別符號。本工具採用簡單的按索引(出現順序)匹配的方式,這種設計更適合關注物件結構或原始值的變化(例如配置檔案或API響應的比較),而非適合追蹤陣列內容的增刪。
在實際工作中,持續整合(CI)流程中自動檢查REST API響應契約是否發生變化,也運用了類似的思路。本工具更看重在瀏覽器內即可完成的便捷性,但其思想與快照測試、契約測試(Contract Testing)是相通的——以機械化方式檢測JSON結構差異,是軟體開發各個環節中反覆出現的課題。