So sánh & vá JSON API

So sánh hai tài liệu JSON theo cấu trúc, sinh JSON Patch (RFC 6902) và Merge Patch (RFC 7386); áp dụng patch vào tài liệu.

POSThttps://apibox.io.vn/v1/json-diff
Dữ liệu & JSON▶ Dùng thử online

API so sánh JSON đối chiếu hai giá trị JSON theo cấu trúc chứ không theo văn bản: thứ tự khoá và cách định dạng không ảnh hưởng. action=diff (với a và b) cho biết hai bên có bằng nhau không, tóm tắt số giá trị thêm, xoá, thay thế, một JSON Patch theo RFC 6902 biến a thành b và Merge Patch tương đương theo RFC 7386, định dạng mà nhiều REST API dùng cho request PATCH.

action=patch áp dụng một JSON Patch (add, remove, replace, move, copy, test) vào tài liệu và trả về kết quả; thao tác test sai hoặc đường dẫn không tồn tại trả về 422 kèm vị trí thao tác, giúp kiểm tra patch trước khi ghi vào cơ sở dữ liệu. action=merge áp dụng Merge Patch (null để xoá khoá).

Mảng được so sánh sau khi bỏ phần đầu và cuối giống nhau, nên thêm hoặc bớt phần tử cho ra patch ngắn. Đường dẫn dùng JSON Pointer với ký tự thoát ~0 / ~1.

Tham số

TênVị tríKiểuBắt buộcMặc định
actionbodystringkhôngdiffdiff, patch hoặc merge.
abodyobjectkhôngVới diff: JSON gốc.
bbodyobjectkhôngVới diff: JSON mới.
jsonbodyobjectkhôngVới patch / merge: tài liệu cần vá.
patchbodyarraykhôngCác thao tác RFC 6902.
merge_patchbodyobjectkhôngMerge patch RFC 7386.

Ví dụ

curl -X POST "https://apibox.io.vn/v1/json-diff" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"a":{"name":"A","tags":["x"],"n":{"a":1,"b":2}},"b":{"name":"B","tags":["x","y"],"n":{"a":1}}}'

Kết quả trả về

{
  "equal": false,
  "summary": {
    "added": 1,
    "removed": 1,
    "replaced": 1
  },
  "patch": [
    {
      "op": "replace",
      "path": "/name",
      "value": "B"
    },
    {
      "op": "add",
      "path": "/tags/1",
      "value": "y"
    },
    {
      "op": "remove",
      "path": "/n/b"
    }
  ],
  "merge_patch": {
    "name": "B",
    "tags": [
      "x",
      "y"
    ],
    "n": {
      "b": null
    }
  }
}

Ứng dụng

  • Hiển thị thay đổi giữa hai phản hồi API hoặc hai phiên bản cấu hình
  • Sinh body cho request PATCH từ object đã chỉnh sửa
  • Nhật ký kiểm toán chỉ lưu phần thay đổi
  • Kiểm tra và áp dụng patch do client gửi lên

Hỏi đáp

JSON Patch hay Merge Patch?

JSON Patch là danh sách thao tác chính xác (kể cả vị trí trong mảng và phép kiểm tra). Merge Patch là tài liệu một phần: đơn giản hơn nhưng không đặt được giá trị null hay sửa một phần mảng.

Thứ tự khoá có quan trọng không?

Không. {"a":1,"b":2} bằng {"b":2,"a":1}. Thứ tự phần tử trong mảng thì có.

Patch lỗi thì sao?

Không thao tác nào được áp dụng; API trả HTTP 422 với mã patch_failed và vị trí thao tác bị lỗi.

API liên quan

Bắt đầu với 1.000 request miễn phí mỗi tháng. Nhận API key miễn phí →