這個工具的用途
JSON Diff 比對兩份 JSON 文件,明確顯示變更內容——新增的鍵、移除的鍵、值的變化——並對每一處差異附上精確的 JSONPath。選擇 object mode 可忽略鍵的順序、進行結構性比對(最常見的用法),或選 text mode 進行嚴格的逐行比對(當你在意空白與格式時)。所有運算都在你的瀏覽器內完成——資料不會上傳。
使用步驟
將 JSON 文件分別貼入兩個面板(或按 Load Example)。結果會顯示在結果面板:綠列表示新增、紅列表示移除、黃列表示變更。關閉 Only differences 可同時看到計數,或從工具列複製為文字、下載。
Input A:
{"name":"devsmiths","version":1,"features":["formatter","validator"],"public":true}Input B:
{"name":"devsmiths","version":2,"features":["formatter","validator","viewer"],"beta":true}差異(object mode):
~ $.version 1 → 2
+ $.features[2] "viewer"
- $.public true
+ $.beta true限制與邊界情況
- 陣列比對採 位置式——A 的第
i個元素會對應 B 的第i個元素。因此重新排列陣列會顯示為一連串變更。LCS(最長共同子序列)配對在 P1-stretch 規劃中。 - Text mode 為基本的 最長共同前綴 + 後綴 差異——刪除與新增區塊不會配對成「變更行」,你會看到清楚的「變更前/變更後」,但不是 Myers-quality 的差異。
- Object mode 會忽略物件鍵順序與不必要的空白(雙邊都會被解析)。Text mode 設計上對空白敏感。
- 若任一邊在 object mode 解析失敗,工具會顯示橫幅指出錯誤的行/欄——可用 Validator 或 Repair 工具修正。
- JSON Patch(RFC 6902)輸出為 stretch goal——目前工具會輸出人類可讀的差異列表。
- 延伸閱讀:比對兩份 JSON 檔案詳細說明各種策略(object vs text、語意 vs 位置)。
常見問題
- object 比較與 text 比較差在哪?
- Object 比較會將雙邊解析為 JSON 值並走訪整棵樹——忽略鍵順序與不必要的空白,並以 JSONPath(例如 $.users[0].name)回報差異。Text 比較則對兩個字串做逐行比對——當格式本身有意義時很有用。
- 為什麼重新排列陣列會顯示成變更?
- 陣列比對是位置式——A[0] 對 B[0]、A[1] 對 B[1],依此類推。移動元素因此會在每個受影響的索引顯示為變更,並在尾端額外顯示新增/移除。LCS 配對在 P1-stretch 規劃中;目前的位置式配對能讓輸出穩定可預期。
- 它會忽略空白嗎?
- Object mode 會——它把雙邊解析為 JSON 值,所以縮排、換行與鍵順序都不重要。Text mode「不會」——它逐行比較兩個字串,完全依照你貼上的內容。
- 新增 / 移除 / 變更怎麼呈現?
- 綠列加上 + 表示新增,紅列加上 − 表示移除,黃列加上 ~ 表示變更。顏色之外還會附符號,所以對色盲使用者以及在終端機複製貼上時都清楚易讀。
- 可以輸出 JSON Patch(RFC 6902)嗎?
- 目前不行——這是 roadmap 項目。今天的差異是以 JSONPath 為鍵的 add/remove/change 操作清單。可從工具列複製或下載為文字。
- 會上傳任何資料嗎?
- 不會。比對完全在你的瀏覽器內進行。雙邊輸入會自動儲存到 localStorage 以便重新整理後仍在,但永遠不會離開你的裝置。