JSON Diff: So sánh object JSON
Dán hai tài liệu JSON để thấy chính xác điều gì đã thay đổi. Mọi khác biệt được liệt kê theo đường dẫn, như $.users[2].email, và định dạng hay thứ tự khóa không bao giờ gây báo động giả.
Chạy trên trình duyệtKhông cần đăng kýKhông tải lên gì
Các đường dẫn thay đổi
| Thay đổi | Đường dẫn | Giá trị cũ | Giá trị mới |
|---|
Cách dùng JSON Diff
- Dán JSON gốc vào bên trái và JSON đã sửa vào bên phải, hoặc mở hai tệp.
- Lỗi cú pháp được hiển thị dưới mỗi ô kèm dòng và cột, để bạn sửa nhanh.
- Đọc bảng Các đường dẫn thay đổi: mỗi hàng cho biết giá trị được thêm, xóa hay thay đổi, kèm giá trị cũ và mới.
- Đánh dấu Bỏ qua thứ tự mảng khi danh sách là tập hợp, ví dụ tag hoặc quyền.
- Cuộn xuống phần xem song song để thấy thay đổi trong ngữ cảnh, hoặc sao chép danh sách thay đổi dạng JSON.
Vì sao diff JSON theo cấu trúc tốt hơn diff văn bản
Diff văn bản thông thường so sánh ký tự và dòng, nên hai tệp JSON chứa cùng dữ liệu có thể trông hoàn toàn khác nhau nếu một tệp bị nén, thụt lề khác hoặc có khóa theo thứ tự khác. Công cụ này phân tích cả hai tài liệu trước rồi so sánh dữ liệu: object được so sánh theo từng khóa bất kể thứ tự, còn số, chuỗi, boolean và null được so sánh theo giá trị. Chỉ những thay đổi thực sự mới được báo cáo.
Cách báo cáo thay đổi
Mỗi khác biệt có một vị trí kiểu JSONPath, như $.owner.email hoặc $.items[3].price, và thuộc một trong ba loại:
- thêm: khóa hoặc phần tử mảng chỉ có trong JSON đã sửa.
- xóa: nó chỉ có trong JSON gốc.
- thay đổi: có ở cả hai nhưng giá trị khác nhau, kể cả thay đổi kiểu như chuỗi trở thành số.
Mảng được căn chỉnh bằng thuật toán dãy con chung dài nhất (LCS), nên việc chèn một phần tử vào đầu danh sách được báo cáo là một lần thêm duy nhất thay vì đánh dấu mọi phần tử phía sau là đã thay đổi.
Bỏ qua thứ tự mảng
Nhiều API trả về danh sách mà thứ tự không mang ý nghĩa, như vai trò, tag hay ID. Khi bật Bỏ qua thứ tự mảng, mảng được so sánh như tập hợp: một phần tử chỉ tính là thêm hoặc xóa nếu không có phần tử bằng nó ở phía bên kia. Phần xem song song khi đó sắp xếp các phần tử mảng để các danh sách bằng nhau thẳng hàng.
Ứng dụng điển hình
So sánh phản hồi API giữa staging và production, kiểm tra một đợt migration đã thay đổi gì trong tệp cấu hình, xem khác biệt giữa hai tệp package.json hoặc tsconfig, và debug snapshot test.
Câu hỏi thường gặp
Thứ tự khóa có quan trọng khi so sánh JSON không?
{"a":1,"b":2} và {"b":2,"a":1} được coi là bằng nhau. Thứ tự mảng mặc định có ý nghĩa vì mảng có thứ tự, nhưng bạn có thể tắt điều đó bằng Bỏ qua thứ tự mảng.JSON của tôi có bị tải lên máy chủ không?
Đường dẫn như $.users[2].email có nghĩa là gì?
$ là gốc của tài liệu, .users là một khóa, và [2] là phần tử thứ ba của mảng (chỉ số bắt đầu từ 0). Khóa có dấu cách hoặc ký tự đặc biệt được viết trong ngoặc vuông, như $["first name"].1 có bằng 1.0 không?
1 và "1", là khác nhau và được báo là đã thay đổi.