So sánh JSON theo cấu trúc

So sánh hai JSON theo khóa và giá trị — bỏ qua thứ tự khóa, định dạng và khoảng trắng.

So sánh mảng

Khác biệt

  • ~ Sửa$.version
    "1.1.0"→"1.2.0"
  • − Xóa$.private
    true
  • + Thêm$.scripts.test
    "vitest run"
  • + Thêm$.tags[2]
    "playwright"
  • + Thêm$.license
    "MIT"
Nhóm Dữ liệu (Data)•Tài liệu kỹ thuật & Đặc tả RFC

Tài liệu & Hướng dẫn chuyên sâu: So sánh JSON theo cấu trúc (JSON Diff)

1. Tổng quan & Nguyên lý hoạt động

So sánh hai JSON bằng công cụ diff theo dòng thường cho kết quả đầy nhiễu: chỉ cần đổi thứ tự khoá hoặc định dạng lại khoảng trắng, mọi dòng đều bị đánh dấu khác biệt. Công cụ này phân tích cả hai tài liệu rồi so sánh theo cấu trúc: từng khoá, từng giá trị, từng phần tử mảng, và liệt kê chính xác đường dẫn kiểu JSONPath (`$.scripts.test`, `$.tags[2]`) của mỗi thay đổi (thêm, xoá, sửa). Rất hợp để đối chiếu phản hồi API giữa hai phiên bản, file cấu hình hay snapshot test.

2. Ưu thế kiến trúc & Tính năng nổi bật

Bỏ qua thứ tự khoá và định dạng

`{"a":1,"b":2}` và `{ "b": 2, "a": 1 }` được coi là giống hệt. Chỉ thay đổi thực sự về dữ liệu mới được báo cáo.

Đường dẫn chính xác cho từng thay đổi

Mỗi dòng kết quả có huy hiệu Thêm / Xoá / Sửa, đường dẫn đầy đủ và giá trị trước → sau với màu phân biệt. Khoá có ký tự đặc biệt được viết dạng `$["a-b"]`.

Hai chế độ so sánh mảng

"Theo vị trí" so từng phần tử cùng chỉ số; "Bỏ qua thứ tự" coi mảng như tập hợp nên `[1,2,3]` và `[3,2,1]` là giống nhau. Nếu một bên không phải JSON hợp lệ, công cụ chỉ rõ bên nào và thông báo lỗi.

3. Cách đọc đường dẫn thay đổi

Đường dẫn dùng cú pháp giống JSONPath, bắt đầu từ gốc `$`:

Đường dẫnÝ nghĩaVí dụ
$.nameKhoá `name` ở cấp gốc{"name":"a"}
$.user.emailKhoá lồng nhau{"user":{"email":"…"}}
$.tags[2]Phần tử thứ 3 (chỉ số 2) của mảng{"tags":["a","b","c"]}
$["a-b"]Khoá chứa ký tự không phải định danh{"a-b":1}

4. Câu hỏi thường gặp (FAQ)

Giải đáp các thắc mắc phổ biến của lập trình viên khi sử dụng tiện ích So sánh JSON theo cấu trúc (JSON Diff).

Khi thứ tự không có ý nghĩa — ví dụ danh sách thẻ, quyền, hay kết quả API không đảm bảo thứ tự. Với dữ liệu mà thứ tự quan trọng (các bước theo trình tự, toạ độ), hãy giữ chế độ "Theo vị trí". Ở chế độ bỏ qua thứ tự, phần tử được so khớp theo nội dung nên vị trí trong đường dẫn chỉ mang tính tham khảo.