Theo tiêu chuẩn IETF RFC 8259 (thay thế RFC 7159 và RFC 4627), JSON là định dạng hoán đổi dữ liệu độc lập với ngôn ngữ, được định nghĩa bằng văn phạm phi ngữ cảnh (Context-Free Grammar). Cấu trúc chỉ cho phép 6 kiểu dữ liệu nguyên thủy: object, array, string, number, boolean (true/false), và null. Bất kỳ ký tự thừa, ghi chú dạng comment (//, /* */), dấu phẩy ở cuối (Trailing Comma), hoặc dấu nháy đơn (') đều vi phạm ngữ pháp nghiêm ngặt của RFC 8259.
- Chuỗi ký tự trong JSON bắt buộc phải được bao đóng bằng dấu nháy kép
"..."; mọi ký tự điều khiển trong khoảngU+0000đếnU+001Fphải được escape. - Số thực (Numbers) không được phép chứa số 0 ở đầu (ví dụ
0123là bất hợp pháp) và không hỗ trợ các giá trị đặc biệtNaN,Infinity,-Infinity. - Bộ phân tích AST (Abstract Syntax Tree) cấp token xác định vị trí lỗi theo cặp tọa độ
(line, column)chính xác phục vụ cơ chế tự sửa 0ms. - Trực tiếp kiểm thử cấu trúc và làm sạch cú pháp qua Kiểm Tra Cú Pháp JSON hoặc định dạng chuẩn qua Định Dạng JSON.
Ma Trận Tiêu Chuẩn & Cơ Quan Quy Chiếu
| Thuộc Tính / Cú Pháp | JSON (RFC 8259) | JSON5 (Mở Rộng) | YAML 1.2 | Python Dict Literal |
|---|---|---|---|---|
| Dấu nháy bọc chuỗi | Bắt buộc nháy kép `"` | Nháy đơn `'` hoặc kép `"` | Tùy chọn, nháy đơn/kép | Nháy đơn `'` hoặc kép `"` |
| Dấu phẩy cuối (Trailing Comma) | Nghiêm cấm hoàn toàn | Cho phép | Cho phép | Cho phép |
| Ghi chú (Comments) | Không hỗ trợ | Hỗ trợ `//` và `/* */` | Hỗ trợ `#` | Hỗ trợ `#` |
| Khóa của Object | Bắt buộc chuỗi trong nháy kép | Cho phép định danh không nháy | Chuỗi, số, hoặc phức hợp | Bất kỳ hashable object nào |
| Giá trị số đặc biệt | Không hỗ trợ (`NaN`, `Infinity`) | Hỗ trợ `NaN`, `Infinity`, `hex` | Hỗ trợ `.nan`, `.inf` | Hỗ trợ `float('nan')` |
| Tính xác định khi Parse | Tuyệt đối (Mọi parser đồng thuận) | Phụ thuộc thư viện | Phức tạp do kiểu ngầm định | Phụ thuộc runtime Python |
1. Không Gian Trạng Thái Ngữ Pháp Theo IETF RFC 8259
Tài liệu RFC 8259 định nghĩa ngữ pháp JSON dưới dạng văn phạm Backus-Naur mở rộng (ABNF). Một văn bản JSON hợp lệ chỉ bao gồm duy nhất một giá trị (Value), có thể là một kiểu dữ liệu có cấu trúc (object hoặc array) hoặc kiểu nguyên thủy. Điểm khắt khe của RFC 8259 nằm ở tính phi ngữ cảnh hóa và tính đóng băng hình thức; chuẩn không cho phép bất kỳ hành vi mở rộng cú pháp nào dựa trên phỏng đoán của trình biên dịch.
2. Bảng Phân Tích Các Vi Phạm Cú Pháp Phổ Biến & Giải Thuật Auto-Fix
Trailing Commas (Dấu Phẩy Thừa)
Dấu phẩy đặt trước } hoặc ] vi phạm ngữ pháp RFC 8259. Bộ Auto-Fix sử dụng regex lookahead ,(?=\s*[}\]]) để bóc tách triệt để mà không làm rách chuỗi ký tự nội dung.
Single Quotes vs Double Quotes
Ký tự ' thay cho " khiến trình phân tích JSON tiêu chuẩn báo lỗi. Thuật toán quét máy trạng thái (State Machine) chuyển đổi nháy đơn ngoài chuỗi thành nháy kép và escape nháy kép bên trong.
Unquoted Object Keys
Các khóa không bọc nháy như { name: "Alice" } phổ biến trong JavaScript. Bộ phân tích xác định định danh đứng trước dấu hai chấm : và bọc chuẩn "name": theo RFC 8259.
3. Bảo Đảm Tính Toàn Vẹn Chuỗi & Chuyển Đổi Đa Định Dạng
Khi chuyển đổi giữa các định dạng như YAML và JSON, một rủi ro kỹ thuật lớn là việc xử lý các chuỗi đặc biệt (ví dụ URL có chứa // dễ bị trình bóc comment xóa nhầm) hoặc các từ khóa bị tự động ép kiểu sai (như NO trong YAML bị biến thành false). Cơ chế phân tích của Chuyển Đổi YAML Sang JSON bảo toàn 100% nguyên trạng chuỗi nội dung thông qua bộ bóc tách token phân cấp.
Douglas Crockford
Kết Luận Cốt Lõi
- RFC 8259 loại bỏ hoàn toàn sự không nhất quán về mã hóa: JSON phân phối qua mạng công cộng bắt buộc phải mã hóa UTF-8 mà không có Byte Order Mark (BOM).
- Dấu phẩy trailing comma trước
}hoặc]là nguyên nhân hàng đầu gây sập bộ phân tích cú phápJSON.parsechuẩn. - Cơ chế 1-Click Auto-Fix sử dụng thuật toán quét token 2 pha (Token Lookahead) để tái tạo cú pháp RFC 8259 mà không phá vỡ cấu trúc lồng nhau.

