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ì

Thứ tự khóa luôn được bỏ qua.

Cách dùng JSON Diff

  1. 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.
  2. 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.
  3. Đọ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.
  4. Đá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.
  5. 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?
Không. Object JSON không có thứ tự, nên {"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?
Không. Cả hai tài liệu được phân tích và so sánh trong trình duyệt của bạn. Không có gì được gửi qua mạng, nên công cụ an toàn với phản hồi API chứa token hay dữ liệu khách hà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?
Có. Cả hai được phân tích thành cùng một số, nên không bị báo là khác biệt. Một số và một chuỗi, như 1 và "1", là khác nhau và được báo là đã thay đổi.
Tôi có thể so sánh JSON có chú thích hoặc dấu phẩy thừa không?
JSON chuẩn không cho phép chúng, nên đầu vào như vậy sẽ bị đánh dấu kèm dòng và cột chính xác. Hãy xóa chú thích hoặc dấu phẩy, hoặc làm sạch tài liệu trong JSON Formatter trước.

Công cụ liên quan