Tất cả bài viết

JSON Repair: vì sao JSON bị hỏng và cách sửa

JSON "hỏng" là vấn đề thường gặp: tệp trông gần như đúng, nhưng trình phân tích cú pháp từ chối đọc nó. Nguyên nhân thường gặp là một con số được dán nguyên xi từ bảng tính theo định dạng Việt Nam.

Nguyên nhân phổ biến khiến JSON không hợp lệ

  • Dấu phẩy thừa trước ngoặc đóng — {"a": 1,} — mà JavaScript chấp nhận nhưng trình phân tích JSON nghiêm ngặt thì không.
  • Dấu nháy đơn thay vì dấu nháy kép — thường gặp khi sao chép từ object literal JavaScript.
  • Khóa không có dấu nháy{name: "An"} thay vì {"name": "An"}.
  • Chú thích — đặc tả JSON hoàn toàn không cho phép chú thích, khác với JSON5 hay JSONC.
  • Đầu ra bị cắt — nếu phản hồi API hoặc tệp log bị cắt giữa chừng, tài liệu sẽ không được đóng.

Dấu phẩy thập phân — cái bẫy âm thầm từ Excel

Định dạng số của Việt Nam dùng dấu phẩy cho phần thập phân và dấu chấm để nhóm hàng nghìn: "1.234,50 đ" là một mức giá hoàn toàn bình thường trong bảng tính. Dán nguyên như vậy vào một trường JSON, {"gia": 1.234,50} không phải số thập phân hợp lệ với trình phân tích — nó đọc 1.234, gặp dấu phẩy sai vị trí, rồi còn thừa một token rời 50. Công cụ sửa lỗi có thể đoán giá trị dự định, nhưng không có gì đảm bảo đó là 1234,50 hay chỉ là 1.234 bị cắt cụt.

Cách sửa tự động hoạt động

Một công cụ sửa JSON áp dụng các phương pháp suy luận: thêm dấu nháy còn thiếu, loại bỏ dấu phẩy thừa, đóng các ngoặc chưa đóng dựa trên ngữ cảnh. Điều này hoạt động tốt với các lỗi phổ biến, điển hình, nhưng không phải phép màu — công cụ không thể đoán được giá trị nào được dự định nếu dữ liệu bị hỏng nghiêm trọng hơn.

Giới hạn của khả năng

Sửa tự động khắc phục cú pháp, không phải ngữ nghĩa. Nếu thiếu hẳn một trường, hoặc một giá trị sai về mặt logic, công cụ sẽ không phát hiện được — kết quả vẫn cần kiểm tra thủ công, nhất là khi con số vốn đến từ một bảng tính định dạng Việt Nam.

Khi việc sửa chữa trở nên mơ hồ

Một số hư hỏng có nhiều cách sửa chữa khả thi như nhau. Một chuỗi bị cắt ngang {"a": 1, "b": 2 có thể được đóng lại đơn giản bằng dấu ngoặc — và mất dữ liệu nếu thực tế còn một trường khác được dự định thêm vào. Thuật toán sửa chữa sẽ đưa ra phỏng đoán "ít phá hủy nhất", nhưng đây chỉ là phỏng đoán, không phải sự đảm bảo.

Dùng thử công cụ