使用方式
- 在左側貼上原始 JSON,在右側貼上變更後的 JSON,或試試範例。
- 選擇陣列的比較方式:依位置,或比對項目,讓插入的項目只會被回報一次。
- 以清單或並排方式檢視差異。每個差異都有從根 ($) 開始的路徑。
- 複製報告,貼到工單或程式碼審查中。
運作方式
兩份文件都會以資料而非文字的方式解析並比較。物件會逐鍵比較,因此鍵的順序、空白或縮排都不影響。數字以值比較,所以 1 和 1.0 相等。
每個差異都有像 JSONPath 表達式的路徑:$ 代表根節點,.name 代表屬性,[2] 代表陣列索引,不屬於簡單名稱的鍵會加上引號,例如 $["first-name"]。差異分為四種:新增(僅右側有)、移除(僅左側有)、變更(型別相同但值不同)以及型別變更(例如數字 44.9 變成字串 "44.90",或某值變成 null)。當整個物件或陣列被新增或移除時,只會在其本身路徑回報一次,而不是逐欄回報。
陣列預設依位置比較:第 0 項對第 0 項、第 1 項對第 1 項。如果某項目插入在開頭,後面每個項目看起來都會像已變更。「比對移動項目」會先用相等項目的最長共同子序列對齊兩個陣列,因此插入或刪除只會回報一次,其餘項目則會配對。新增項目使用其在右側的索引,移除項目使用其在左側的索引。大型陣列(超過約 200 萬個項目配對)會跳過比對,改依位置比較。
清單中的鍵路徑在每個物件內依字母排序。最多顯示 2,000 筆差異;複製的報告一律包含全部差異。
範例
檢查 API 變更
比較同一筆訂單昨天與今天的回應。差異顯示 $.status 從 "pending" 變更為 "shipped",$.total 的型別從數字變成字串,$.coupon 被移除,且 $.customer.phone 被新增。
設定漂移
貼上 staging 與 production 的 JSON 設定。因為忽略鍵的順序,只會顯示實際差異,例如 $.cache.ttl 300 → 60,即使檔案由不同工具儲存也一樣。
插入項目的清單
產品清單新增了第一個項目。依位置比較時,每個產品看起來都改變了;改用「比對移動的項目」後,結果只會有一筆「新增 $[0]」。
常見問題
這與文字 diff 有何不同?
文字 diff 會逐行比較,因此重新排序鍵或重新排版都會顯示為變更。此工具比較的是解析後的資料,因此只會回報值、型別與結構的差異。
為什麼陣列在插入一個項目後會顯示大量變更?
在「依位置」模式下,會以相同索引比較項目,插入會使後續每個項目位移。切換到「比對移動的項目」可先對齊相同的項目。
「1」和 1 會視為相等嗎?
不會。一個是字串,另一個是數字,因此會回報為型別變更。型別相同的值會精確比較。
可以比較非常大的檔案嗎?
幾 MB 的檔案可以使用,但所有內容都會在瀏覽器記憶體中處理,因此非常大的文件在手機上可能會較慢。
隱私權
兩份文件只會在您的瀏覽器中解析與比較,不會上傳、儲存或用於分析。