JSON 比較工具
免費線上 JSON 比對:貼上兩份 JSON,列出每個新增、刪除、修改的欄位路徑與前後的值,欄位順序不算差異、陣列也可不看順序。
左邊貼原本的 JSON、右邊貼新的,按「開始比對」就列出每個新增、刪除、修改的欄位路徑(例如 $.address.city)與前後的值;欄位順序不同不算差異,勾「陣列不看順序」後陣列元素換位置也不算。也能切成逐行對照、複製差異清單。全部在瀏覽器比對,內容不會上傳。
差異清單長什麼樣子
用一筆會員資料示範:B 把 id 與 name 的順序對調、tags 換了順序又多一個、城市改了、多了電話欄位。
A(原本的)
{
"id": 1024,
"name": "王小明",
"tags": [
"vip",
"newsletter"
],
"address": {
"city": "台北市"
}
}B(新的)
{
"name": "王小明",
"id": 1024,
"tags": [
"newsletter",
"vip",
"beta"
],
"address": {
"city": "新北市"
},
"phone": "0912-345-678"
}陣列照位置比(預設)
修改 $.tags[0]: "vip" → "newsletter"
修改 $.tags[1]: "newsletter" → "vip"
新增 $.tags[2]: "beta"
修改 $.address.city: "台北市" → "新北市"
新增 $.phone: "0912-345-678"勾「陣列不看順序」
新增 $.tags[2]: "beta"
修改 $.address.city: "台北市" → "新北市"
新增 $.phone: "0912-345-678"id、name 只是順序不同,兩種模式都不會列出來。tags 照位置比時,第 0、1 格的值互換會被算成修改;不看順序時只剩真的多出來的 beta。
比對的規則
| 情況 | 算不算差異 |
|---|---|
| 物件欄位順序不同 | 不算 |
| 同一個數字不同寫法(1 與 1.0、1e2 與 100) | 不算 |
| 很長的整數 ID 差最後一位(9007199254740993 與 9007199254740992) | 算(保留每一位數比對) |
| 字串內容相同、寫法不同(\u4e2d 與「中」) | 不算 |
| 陣列元素順序不同 | 預設算;勾「陣列不看順序」就不算 |
| 同一個物件裡出現兩個同名欄位 | 以最後一個為準(跟 JSON.parse 一樣) |
| 值的型別不同("1" 與 1) | 算,列為修改 |
差異清單與逐行對照用的是同一套規則,兩邊的結論不會互相矛盾。
路徑怎麼看
- $:代表整份 JSON 的最外層。
- .欄位名:物件裡的欄位,例如 $.user.email。欄位名有空格或特殊字元時寫成 $["first name"]。
- [數字]:陣列的第幾個元素,從 0 開始,例如 $.items[2] 是第三個。「新增」看的是 B 的位置,「刪除」看的是 A 的位置。
整個物件或陣列被加進來或拿掉時,只列一行(值太長會截斷),不會把裡面每個欄位都展開。
差異清單適合找「哪個欄位變了」;想看完整的上下文,切到「逐行對照」:兩邊都先把欄位依名稱排好再逐行比,新增的行標綠色、刪除的行標紅色刪除線。
常見的用法
- API 改版:把舊版與新版的回應各貼一份,確認只改了預期的欄位。
- 設定檔:比對兩個環境(測試與正式)的設定 JSON,找出不一樣的參數。
- 測試資料:預期結果與實際結果對照,複製差異清單貼進問題回報。
- 後台資料改前改後:同一筆資料修改前後各匯出一份 JSON,一眼看出被改了哪些欄位。
格式錯誤時會指出是左側還是右側、第幾行第幾字;常見原因是結尾多了逗號、字串用單引號、少了括號。JSON 很大時比對在你的電腦上進行,速度取決於裝置。
JSON 比較工具功能特點
- 依結構比對:每個差異列出路徑(例如 $.user.tags[2])與前後的值,分成修改、新增、刪除
- 欄位依名稱排序後再比,欄位順序不同不算差異
- 可選「陣列不看順序」:[1,2] 與 [2,1] 視為相同
- 也能切換成逐行對照:新增綠色、刪除紅色
- 差異清單一鍵複製
- 自動檢查 JSON 格式,錯了會說是左邊還是右邊、第幾行第幾字
- 超過 2^53 的大整數(例如 ID)照實比對,不會把不同的數字當成一樣
- 格式化、左右交換、載入範例、開啟 .json 檔
- 在瀏覽器處理,不上傳
如何使用JSON 比較工具?
- 左邊貼上原本的 JSON、右邊貼上新的(或開啟 .json 檔)
- 需要時勾「陣列不看順序」
- 按「開始比對」
- 在差異清單看每個欄位怎麼變,或切到逐行對照;可複製清單
JSON 比較工具常見問題
欄位順序不同會算差異嗎?
不會。比對前會把物件的欄位依名稱排序,{"a":1,"b":2} 和 {"b":2,"a":1} 視為相同。陣列裡元素的順序預設仍然算,[1,2] 和 [2,1] 會顯示差異;勾選「陣列不看順序」就視為相同。
很長的數字 ID 比得出差異嗎?
比得出來。一般用 JSON.parse 比對的工具,超過 2^53 的整數會失真,9007199254740993 和 9007199254740992 會被當成一樣;本工具保留大整數的每一位數再比。1.0 和 1 這種同一個數字的不同寫法則視為相同。
改了一個值會怎麼顯示?
差異清單會列一行「修改」,寫出欄位路徑(例如 $.address.city)與 A、B 兩邊的值;切到逐行對照則是原本那一行標紅色刪除線、新的那一行標綠色。
有長度或次數限制嗎?
長度沒有另外設限,比對在瀏覽器裡進行,很大的 JSON 會比較慢。不登入每天可以比對 3 次,免費登入後每天 10 次。
JSON 格式錯誤怎麼辦?
比對前會先解析兩邊的 JSON,格式不對會顯示是左側還是右側、第幾行第幾字有問題。常見原因是結尾多了逗號、字串用單引號、或少了括號。
可以直接開啟 .json 檔比對嗎?
可以。兩個輸入框右上角各有開檔按鈕,選好兩個 .json 檔再按「開始比對」即可;檔案在瀏覽器裡讀取,不會上傳。
可以比對 YAML、XML 或 CSV 嗎?
這個工具只讀 JSON。YAML、XML 要先轉成 JSON 再比;如果只是兩份純文字或設定檔想看哪幾行不同,用站上的文字比對工具即可,它逐字、逐行都能比。
差異清單可以匯出嗎?
按結果右上角的複製鈕,差異清單會以「修改 路徑: 舊值 → 新值」一行一筆的文字放進剪貼簿,可以貼到問題回報、Email 或文件。