So sánh JSON
Dán hai tài liệu JSON — các đường dẫn thay đổi hiện ra ngay, không cần bấm nút, không tải lên gì.
Khác biệt0đường dẫn được thêm0giá trị bị thay đổi0đường dẫn bị xóa
Cách sử dụng
- Dán JSON cũ vào “JSON gốc” và JSON mới vào “JSON đã sửa” — mọi đường dẫn được thêm, bị xóa hay thay đổi hiện ra ngay khi bạn gõ, không có nút nào cần bấm.
- Thứ tự khóa, 1 so với 1.0, 1e0 so với 1 và \u00e9 so với é không phải khác biệt: việc so sánh là theo cấu trúc. Nếu cần xem lại thay đổi định dạng hay thứ tự khóa, hãy dùng công cụ so sánh văn bản.
- Dùng “Sao chép diff” để lấy toàn bộ danh sách: mỗi dòng bắt đầu bằng +, - hoặc ~, tiếp theo là đường dẫn và giá trị đầy đủ, sẵn sàng cho phiếu yêu cầu hoặc email.
Ví dụ
Hai tài liệu
【Gốc】
{"order":"A-2026-001","customer":{"name":"Minh","city":"Hà Nội"},"total":1299.5,"paid":false}
【Đã sửa】
{"order":"A-2026-001","customer":{"name":"Minh","city":"Đà Nẵng"},"total":1399.0,"paid":true,"coupon":"WELCOME10"}Khác biệt
+ $.coupon "WELCOME10" ~ $.customer.city "Hà Nội" → "Đà Nẵng" ~ $.total 1299.5 → 1399.0 ~ $.paid false → true (+1 ~3 −0)
Các dòng 【Gốc】/【Đã sửa】 chỉ là tiêu đề ví dụ; khi dùng thật, hai tài liệu được đặt vào hai ô nhập. Chỉ những thay đổi giá trị thật sự được liệt kê: mã đơn và tên khách không đổi nên không hiển thị, và thứ tự khóa không bao giờ là khác biệt.
Quy tắc, giới hạn và các vấn đề đã biết
- Đây là so sánh cấu trúc, không phải so sánh văn bản: thứ tự khóa của object bị bỏ qua; 1, 1.0 và 1e0 là cùng một số; "\u00e9" và "é" là cùng một chuỗi. Hãy dùng công cụ so sánh văn bản nếu bạn quan tâm thay đổi định dạng.
- Số được so sánh dưới dạng số thập phân chính xác, không bao giờ qua Number của JavaScript: 9007199254740993 vẫn chính xác và 1e400 không trở thành Infinity. Danh sách vẫn hiển thị con số đúng như bạn đã nhập.
- Chuỗi được so sánh theo giá trị đã giải mã và hiển thị ở dạng JSON chuẩn; khóa trùng giữ giá trị cuối cùng, như JSON.parse, và một cảnh báo cho biết đã tìm thấy bao nhiêu khóa trùng.
- Mảng có thứ tự: các lần chèn và xóa được căn khớp, nên thêm một phần tử ở đầu là một dòng “+”, không phải thay đổi mọi phần tử phía sau. Việc di chuyển được báo thành một lần xóa cộng một lần thêm, và không có tùy chọn “bỏ qua thứ tự mảng”.
- Thêm hoặc xóa cả một nhánh con chỉ là một đường dẫn. Giá trị quá dài được hiển thị trên màn hình dưới dạng “object · N khóa” hoặc “array · N phần tử”, trong khi “Sao chép diff” luôn chứa giá trị đầy đủ.
- “Sao chép diff” tạo ra danh sách thay đổi dạng văn bản thuần (+ / - / ~, đường dẫn, giá trị đầy đủ), không phải JSON Patch. Việc chèn và xóa trong mảng làm dịch chỉ số phía sau, nên một JSON Patch ngây thơ sẽ không áp dụng được.
- Đường dẫn dùng dạng $.a.b[0]. Các mục bị xóa trỏ tới chỉ số cũ; các mục được thêm và thay đổi trỏ tới tài liệu mới.
- Giới hạn: kết quả cập nhật khoảng 0,6 giây sau khi bạn ngừng gõ khi tổng vượt 200.000 ký tự; một tài liệu trên 1.000.000 ký tự hoặc độ lồng trên 256 cấp được báo là lỗi, không bao giờ bị cắt bớt. Mảng vượt giới hạn căn khớp được so sánh theo chỉ số và có ghi chú; tối đa 400 dòng thay đổi được hiển thị, nhưng sao chép luôn cho danh sách đầy đủ.
- Không tải tệp lên, không tải JSON từ URL, không truy vấn JSON Schema hay JSONPath, không lịch sử và không liên kết chia sẻ. Mọi thứ chạy trong trình duyệt: không gì được tải lên hay lưu lại.
- Trên trang tiếng Trung, Nhật và Hàn, “Dấu câu toàn khổ” được bật mặc định: dấu câu ngoài chuỗi được đổi về ASCII, còn nội dung bên trong chuỗi giữ nguyên đúng như khi nhập.
Công cụ nhà phát triển liên quan
Những việc thường cần làm tiếp sau khi đã đối chiếu hai tài liệu.