Sửa JSON hỏng API
Sửa JSON hỏng: thiếu nháy, thiếu hoặc thừa dấu phẩy, comment, giá trị Python / JS, chuỗi bị cắt, khối code Markdown. Trả về danh sách lỗi đã sửa.
Gửi đoạn text lẽ ra là JSON nhưng không parse được, thường là câu trả lời của mô hình ngôn ngữ, object literal JavaScript, dict Python hay một dòng log, API trả về JSON hợp lệ. Việc sửa (thư viện jsonrepair) gồm: thêm nháy cho key và chuỗi chưa có nháy, đổi nháy đơn và nháy cong thành nháy kép, bỏ comment, dấu phẩy thừa và chỗ giữ chỗ ..., thêm dấu phẩy, dấu hai chấm còn thiếu, đổi True / False / None và undefined / NaN, bóc lớp JSONP và hàm MongoDB (ObjectId("…")), nối "a" + "b", escape xuống dòng trong chuỗi và đóng chuỗi, ngoặc vuông, ngoặc nhọn của output bị cắt ngang.
Với câu trả lời của LLM, API cắt lấy phần JSON trước: khối code Markdown đầu tiên, hoặc đoạn từ { / [ đầu tiên tới } / ] cuối cùng. Nhiều giá trị ở cấp ngoài cùng (NDJSON, JSON lines) được gom thành mảng, JSON bị mã hoá thành chuỗi JSON được giải mã. Kết quả gồm text đã sửa (format giữ nguyên, pretty hoặc minify), dữ liệu đã parse data, danh sách fixes kèm vị trí xuất hiện đầu tiên, và với input tới 20.000 ký tự là danh sách changes chính xác từng ký tự.
Gửi kèm JSON Schema ở schema để kiểm tra luôn dữ liệu đã sửa (draft 2020-12). JSON hợp lệ được trả lại nguyên vẹn với valid_input: true. Text không thể thành JSON (ví dụ chỉ có dấu đóng ngoặc) trả về lỗi 422 kèm vị trí. Tối đa 5 MB; không lưu dữ liệu.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
json | body|query | string | có | Đoạn JSON bị lỗi (hoặc gửi dạng body text/plain). | |
format | body|query | string | không | keep | keep (giữ bố cục của input), pretty hoặc minify. |
indent | body|query | number | không | 2 | Số khoảng trắng thụt lề khi format=pretty (0-8). |
schema | body | object | không | JSON Schema (draft 2020-12) để kiểm tra dữ liệu sau khi sửa. | |
parse | body|query | boolean | không | true | false để không trả về data đã parse. |
unescape | body|query | boolean | không | true | Giải mã JSON bị gửi dưới dạng chuỗi JSON ("{\"a\":1}"). |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/json-repair" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"json":"```json\n{name: '\''Lan'\'', age: 30, tags: ['\''a'\'', '\''b'\'',], vip: True, note: None\n```"}'const res = await fetch('https://apibox.io.vn/v1/json-repair', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"json": "```json\n{name: 'Lan', age: 30, tags: ['a', 'b',], vip: True, note: None\n```"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/json-repair",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"json": "```json\n{name: 'Lan', age: 30, tags: ['a', 'b',], vip: True, note: None\n```"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/json-repair');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"json":"```json\\n{name: \'Lan\', age: 30, tags: [\'a\', \'b\',], vip: True, note: None\\n```"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"valid_input": false,
"changed": true,
"repaired": "{\"name\": \"Lan\", \"age\": 30, \"tags\": [\"a\", \"b\"], \"vip\": true, \"note\": null}",
"fixes": [
{
"type": "markdown_fence",
"message": "Removed Markdown code fences (```json … ```)",
"position": 0,
"count": 1
},
{
"type": "unquoted_key",
"message": "Quoted unquoted object keys",
"position": 9,
"count": 5
},
{
"type": "single_quotes",
"message": "Replaced single-quoted strings with double quotes",
"position": 15,
"count": 3
},
{
"type": "trailing_comma",
"message": "Removed trailing commas",
"position": 46,
"count": 1
},
{
"type": "python_constant",
"message": "Converted Python constants True / False / None to true / false / null",
"position": 55,
"count": 2
},
{
"type": "unclosed_bracket",
"message": "Closed brackets / braces left open (truncated JSON)",
"position": 71,
"count": 1
}
],
"changes": [
{
"position": 0,
"removed": "```json\n",
"added": ""
},
{
"position": 9,
"removed": "",
"added": "\""
},
"…"
],
"data": {
"name": "Lan",
"age": 30,
"tags": [
"a",
"b"
],
"vip": true,
"note": null
},
"type": "object"
}
Ứng dụng
- Đọc câu trả lời gần đúng JSON của ChatGPT, Claude, Gemini
- Làm sạch JSON dán từ code JavaScript, lệnh print của Python hay log
- Cứu phần đầu của response JSON bị cắt do timeout hoặc giới hạn token
- Vừa sửa vừa kiểm tra theo schema trong một bước trên n8n / Make
Hỏi đáp
JSON hợp lệ có bị thay đổi không?
Không. Input hợp lệ được trả lại nguyên vẹn (valid_input: true), trừ khi bạn chọn format=pretty hoặc minify.
Làm sao biết đã sửa những gì?
fixes nêu từng loại lỗi kèm vị trí đầu tiên và số lần; với input tới 20.000 ký tự, changes liệt kê mọi đoạn ký tự được thêm hoặc xoá.
API có tự bịa dữ liệu bị thiếu không?
Không. Giá trị bị cắt được đóng lại tại chỗ dừng (chuỗi bị cắt vẫn giữ nguyên phần còn lại, mảng và object đang mở được đóng); không đoán thêm gì.
API liên quan
Kiểm tra JSON
Kiểm tra cú pháp JSON, báo đúng dòng và cột bị lỗi, và validate dữ liệu theo JSON Schema (draft 4, 7, 2019-09 hoặc 2020-12).
{ }Định dạng JSON
Làm đẹp JSON với thụt lề 0-8 dấu cách hoặc tab, rút gọn (minify) hoặc sắp xếp key theo bảng chữ cái. Báo lỗi cú pháp kèm dòng và cột.
CSVCSV sang JSON
Chuyển CSV thành mảng object JSON theo dòng tiêu đề, tự nhận dấu phân cách, tự chuyển số và boolean, báo lỗi từng dòng.