JSON 對比
粘兩份 JSON,路徑級差異立刻出現——不用點按鈕,不上傳。
差異結果0新增路徑0修改值0刪除路徑
使用方法
- 把改動前的 JSON 粘進「原始 JSON」,改動後的粘進「對比 JSON」——每一條新增 / 刪除 / 修改路徑隨輸入出現,沒有比較按鈕。
- 鍵序、1 與 1.0、1e0 與 1、\u00e9 與 é 都不算差異:這裡比的是結構。要看格式或鍵序變化,請用文本對比工具。
- 點「複製差異」把完整清單帶走:每行是 +、- 或 ~ 加路徑與完整值,可以直接貼進工單或郵件。
示例
兩份文件
【原始】
{"訂單號":"A-2026-001","客戶":{"姓名":"李娜","城市":"上海"},"金額":1299.5,"已支付":false}
【對比】
{"訂單號":"A-2026-001","客戶":{"姓名":"李娜","城市":"北京"},"金額":1399.0,"已支付":true,"優惠券":"WELCOME10"}差異
+ $.優惠券 "WELCOME10" ~ $.客戶.城市 "上海" → "北京" ~ $.金額 1299.5 → 1399.0 ~ $.已支付 false → true (+1 ~3 −0)
【原始】/【對比】只是示例標題,真實使用時兩份文件分別放進兩個輸入框。示例只列真實值變化:沒變的訂單號與客戶姓名不出現,鍵序永遠不會被當成差異;中文頁預設開啟「相容全形標點」,所以原始裡那串全形冒號/逗號也能直接解析。
口徑、上限與已知問題
- 這是結構對比,不是文本對比:物件鍵序無關;1、1.0、1e0 是同一個數;"\u00e9" 與 "é" 是同一個字串。要看格式或鍵序變化,請用文本對比工具。
- 數字按精確十進位制比較,不經過 JavaScript 的 Number:9007199254740993 不會丟位,1e400 不會變成 Infinity;清單裡仍按你寫的原文顯示數字。
- 字串按解碼後的值比較,顯示時用標準 JSON 形式重新轉義;重複鍵與 JSON.parse 一樣取最後一個值,並提示重複處數。
- 陣列是有序的:插入 / 刪除會先對齊,所以在頭部插入一項只出一條「+」,不會把後面每一項都標成變化。移動會顯示為一刪一增;不提供「忽略陣列順序」。
- 新增或刪除整棵子樹只算一條路徑。螢幕上過長的值會顯示成「物件 · N 個鍵」或「陣列 · N 項」,「複製差異」裡始終是完整值。
- 「複製差異」是純文本清單(+ / - / ~ + 路徑 + 完整值),不是 JSON Patch。陣列增刪會讓後續下標移位,naive 的 JSON Patch 會套用失敗,所以不冒充標準。
- 路徑用 $.a.b[0] 形式。刪除項指向舊文件的下標;新增與修改項指向新文件。
- 上限:兩份合計超過 20 萬字符時,結果在停止輸入約 0.6 秒後更新;單份超過 100 萬字符或巢狀超過 256 層直接報錯,不截斷。陣列超過對齊上限時按下標逐一比較並提示;螢幕最多渲染 400 條變更,複製始終是完整清單。
- 不上傳檔案、不從 URL 載入、不做 JSON Schema / JSONPath 查詢、不儲存歷史、不生成分享連結;所有計算都在瀏覽器裡完成。
- 中文 / 日文 / 韓文頁的「相容全形標點」預設開啟:只把字串外的全形標點折成 ASCII,字串內部原樣保留。
相關開發工具
兩份 JSON 對比完之後,通常還會用到。