So sánh JSON online
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.
Kết quả
Bấm “Chạy” để xem kết quả.
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.
Dùng trong code của bạn
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}}}'const res = await fetch('https://apibox.io.vn/v1/json-diff', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"a": {
"name": "A",
"tags": [
"x"
],
"n": {
"a": 1,
"b": 2
}
},
"b": {
"name": "B",
"tags": [
"x",
"y"
],
"n": {
"a": 1
}
}
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/json-diff",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"a": {"name": "A", "tags": ["x"], "n": {"a": 1, "b": 2}}, "b": {"name": "B", "tags": ["x", "y"], "n": {"a": 1}}},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/json-diff');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"a":{"name":"A","tags":["x"],"n":{"a":1,"b":2}},"b":{"name":"B","tags":["x","y"],"n":{"a":1}}}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Tài liệu API → Nhận API key miễn phí
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.