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.

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

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ênVị tríKiểuBắt buộcMặc định
jsonbody|querystringcóĐoạn JSON bị lỗi (hoặc gửi dạng body text/plain).
formatbody|querystringkhôngkeepkeep (giữ bố cục của input), pretty hoặc minify.
indentbody|querynumberkhông2Số khoảng trắng thụt lề khi format=pretty (0-8).
schemabodyobjectkhôngJSON Schema (draft 2020-12) để kiểm tra dữ liệu sau khi sửa.
parsebody|querybooleankhôngtruefalse để không trả về data đã parse.
unescapebody|querybooleankhôngtrueGiả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```"}'

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

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