So sánh JSON (JSON Diff)
So sánh hai object JSON theo ngữ nghĩa — liệt kê giá trị được thêm, xóa và thay đổi theo path, không phụ thuộc thứ tự khóa. Rất hợp để so sánh response API và file cấu hình.
Dán hai giá trị JSON để so sánh theo path.
Giới thiệu công cụ
JSON Diff so sánh hai giá trị JSON theo ngữ nghĩa và cho bạn biết chính xác điều gì đã thay đổi — khóa nào được thêm, khóa nào bị xóa và giá trị nào khác nhau — liệt kê theo path của chúng. Khác với diff văn bản thuần, nó bỏ qua thứ tự khóa và định dạng, nên các trường bị đổi thứ tự hay thụt lề khác nhau không tạo ra nhiễu.
Công cụ được làm cho công việc hằng ngày là so sánh response API, file cấu hình và fixture. Mọi thứ xử lý trong trình duyệt, nên hai payload đầy dữ liệu production có thể so sánh mà không cái nào bị tải lên.
Cách sử dụng
- Dán giá trị JSON thứ nhất vào ô bên trái.
- Dán giá trị JSON thứ hai vào ô bên phải.
- Công cụ phân tích cả hai và báo điểm khác biệt ngay lập tức.
- Đọc từng thay đổi theo path — ví dụ user.address.city.
- Chú ý mục nào được đánh dấu thêm, xóa hay thay đổi.
- Sửa nguồn và chạy lại để xác nhận hai bên đã giống hệt nhau.
Tính năng
- So sánh theo ngữ nghĩa, bỏ qua thứ tự khóa và khoảng trắng.
- Mỗi thay đổi được báo theo path đầy đủ vào bên trong object.
- Phân loại rõ ràng: giá trị được thêm, bị xóa và bị thay đổi.
- Xử lý object và mảng lồng nhau ở mọi độ sâu.
- Rất hợp để so sánh response API, file cấu hình và fixture kiểm thử.
- Hoàn toàn phía client, nên payload production không bao giờ bị tải lên.
Câu hỏi thường gặp
Dữ liệu của tôi có an toàn khi so sánh hai payload JSON không?
Có. Cả hai giá trị được phân tích và so sánh trong trình duyệt bằng JavaScript, nên không có gì gửi lên server — an toàn cho dữ liệu production hay nhạy cảm.
Thứ tự khóa có ảnh hưởng đến việc so sánh không?
Không. Diff theo ngữ nghĩa, nên hai object có cùng khóa và giá trị được coi là bằng nhau kể cả khi các khóa xuất hiện theo thứ tự khác.
Mảng được so sánh thế nào?
Mảng được so sánh theo vị trí, nên thay đổi tại một chỉ số cụ thể được báo theo path của nó. Vì vậy đổi thứ tự phần tử sẽ hiện ra như một điểm khác biệt.
Thay đổi được báo theo path nghĩa là gì?
Mỗi khác biệt được gắn nhãn đường dẫn để đến nó, như items.0.price, để bạn xác định đúng trường bị khác bên trong cấu trúc sâu.
Vì sao vẫn hiện khác biệt khi hai đoạn text trông giống nhau?
Hãy để ý các khác biệt tinh vi mà mắt bỏ sót — một số lưu dưới dạng chuỗi, một null thừa ở cuối, hay một khóa dư. Vì so sánh theo giá trị và kiểu, những thứ này được tính là thay đổi thật.