Cách sửa lỗi cú pháp JSON phổ biến: Dấu phẩy thừa, dấu ngoặc và chuẩn RFC 8259
Mục lục nội dung
1. Tiêu chuẩn RFC 8259 và sự khắt khe của định dạng JSON
Định dạng JSON (JavaScript Object Notation) được chuẩn hóa chính thức qua tài liệu RFC 8259 của IETF. Mặc dù có nguồn gốc từ cú pháp đối tượng của ngôn ngữ JavaScript, JSON là một định dạng trao đổi dữ liệu độc lập và tuân thủ các quy tắc ngữ pháp cực kỳ nghiêm ngặt mà JavaScript thông thường có thể bỏ qua.
Khi gọi hàm JSON.parse(), bất kỳ sai lệch nào dù chỉ một ký tự đơn lẻ cũng sẽ khiến trình phân tích cú pháp ném ra ngoại lệ SyntaxError và dừng toàn bộ quá trình thực thi chương trình.
2. Bốn lỗi cú pháp JSON phổ biến nhất và cách khắc phục
Lỗi 1: Dấu phẩy thừa ở cuối mảng hoặc đối tượng (Trailing Commas)
Trong JavaScript hiện đại (ES5+), việc để dấu phẩy ở phần tử cuối cùng là hoàn toàn hợp lệ. Tuy nhiên, theo mục 4 và 5 của chuẩn RFC 8259, dấu phẩy chỉ đóng vai trò phân cách giữa các phần tử. Dấu phẩy cuối cùng không được phép xuất hiện:
// ❌ SAI: Gây lỗi "Unexpected token } in JSON at position..."
{
"name": "GoToolstack",
"active": true,
}
// ✅ ĐÚNG:
{
"name": "GoToolstack",
"active": true
}Lỗi 2: Sử dụng dấu nháy đơn thay vì dấu nháy kép
Tất cả các khóa (keys) và giá trị chuỗi (string values) trong JSON bắt buộc phải được bao bọc bởi cặp dấu nháy kép tiêu chuẩn (ASCII 34: "..."). Dấu nháy đơn ('...') hoặc dấu backtick (`...`) hoàn toàn không hợp lệ trong JSON.
Lỗi 3: Ký tự điều khiển và escape sequence chưa được xử lý
Các chuỗi ký tự chứa ngắt dòng thực tế (literal newline), ký tự tab, hoặc dấu gạch chéo ngược (backslash) chưa được escape sẽ làm hỏng trình đọc. Bạn phải thay thế ngắt dòng bằng \n, dấu tab bằng \t và dấu backslash bằng \\.
Lỗi 4: Vấn đề mất độ chính xác với số nguyên lớn (BigInt Precision)
Trong JavaScript, kiểu số tiêu chuẩn tuân theo định dạng dấu phẩy động 64-bit IEEE 754, với giới hạn số nguyên an toàn tối đa là Number.MAX_SAFE_INTEGER ($2^{53} - 1 = 9,007,199,254,740,991$).
Khi làm việc với các hệ thống phân tán sử dụng mã định danh Snowflake ID 64-bit (chẳng hạn như ID bài đăng của Twitter hoặc Discord), việc đọc trực tiếp chuỗi số dài hơn 16 chữ số dưới dạng số học trong JSON sẽ làm tròn và biến dạng vài chữ số cuối. Giải pháp chuẩn mực là đóng gói các ID số nguyên lớn này dưới dạng chuỗi văn bản (String).
3. Cách định vị lỗi theo dòng và cột từ vị trí byte (Position Offset)
Thông báo lỗi mặc định của JSON.parse() thường chỉ cung cấp vị trí byte tổng thể, ví dụ: Unexpected token '}' at position 148. Để giúp lập trình viên tìm ra lỗi ngay lập tức, công cụ JSON của GoToolstack tự động quét qua chuỗi nguồn, phân chia các ký tự xuống dòng (\n) để chuyển đổi vị trí số nguyên thành tọa độ Dòng X, Cột Y trực quan.
4. Checklist kiểm tra nhanh tính hợp lệ của tài liệu JSON
- Mọi tên trường (key) đều có dấu nháy kép
"..."bao quanh. - Không có dấu phẩy thừa đứng trước dấu đóng ngoặc nhọn
}hoặc đóng ngoặc vuông]. - Giá trị boolean được viết bằng chữ thường:
truehoặcfalse(không dùngTruehayFALSE). - Giá trị rỗng được định nghĩa bằng
null(JSON không hỗ trợ giá trị chưa khởi tạo hoặc hàm function).