JSON

JavaScript Object Notation, định dạng trao đổi dữ liệu nhẹ dễ đọc cho cả con người và máy.

JSON (JavaScript Object Notation) là định dạng trao đổi dữ liệu dựa trên văn bản nhẹ biểu diễn dữ liệu dưới dạng cặp khóa-giá trị. Douglas Crockford chính thức hóa đặc tả năm 2001, và nó đã được chuẩn hóa là ECMA-404 và RFC 8259. Mặc dù bắt nguồn từ cú pháp JavaScript, JSON độc lập với ngôn ngữ và được hỗ trợ bởi hầu hết mọi ngôn ngữ lập trình bao gồm Python, Java, Go và Ruby.

JSON hỗ trợ sáu kiểu dữ liệu: chuỗi (trong dấu ngoặc kép), số (số nguyên và số thực), boolean (true/false), null, mảng (ngoặc vuông) và đối tượng (ngoặc nhọn). Sự đơn giản này là thế mạnh lớn nhất của JSON và lý do nó trở thành định dạng phản hồi tiêu chuẩn thực tế cho REST API. Sách thiết kế Web API bao gồm các mẫu sử dụng JSON có hệ thống.

So với XML, JSON không cần thẻ mở/đóng, dẫn đến ký hiệu ít dài dòng hơn và phân tích nhanh hơn. Cùng dữ liệu thường cần khoảng 60-70% kích thước trong JSON so với XML. Tuy nhiên, XML cung cấp định nghĩa schema mạnh mẽ (XSD) và hỗ trợ namespace, khiến nó là lựa chọn ưu tiên khi cần xác thực dữ liệu nghiêm ngặt. YAML là tập cha của JSON với hỗ trợ comment và anchor, phổ biến cho tệp cấu hình, mặc dù cú pháp phụ thuộc thụt lề có thể gây lỗi khi sao chép-dán.

JSON có một số hạn chế. Nó không hỗ trợ comment, vì vậy JSON5 hoặc JSONC (JSON with Comments) đôi khi được sử dụng cho tệp cấu hình. Không có kiểu ngày, vì vậy dữ liệu datetime thường được biểu diễn dưới dạng chuỗi định dạng ISO 8601 (ví dụ: "2025-01-15T09:30:00Z"). Dấu phẩy cuối không được phép, nghĩa là dấu phẩy sau phần tử cuối cùng trong mảng hoặc đối tượng gây lỗi cú pháp.

Trong thực tế, JSON Schema được sử dụng rộng rãi cho xác thực và định nghĩa schema. Định nghĩa cấu trúc request/response API với JSON Schema làm rõ hợp đồng dữ liệu giữa client và server, ngăn dữ liệu không hợp lệ được truyền. Hướng dẫn thực hành JavaScript cũng bao gồm cách sử dụng JSON nâng cao.

Từ góc độ bảo mật, phân tích JSON từ nguồn không đáng tin cậy bằng eval() phải được tránh nghiêm ngặt. Luôn sử dụng JSON.parse() để ngăn thực thi mã tùy ý. Ngoài ra, escape đúng cách là cần thiết khi nhúng đầu vào người dùng trực tiếp vào JSON để ngăn tấn công JSON injection.

Từ góc độ đếm ký tự, các phần tử cú pháp JSON như tên khóa, ngoặc nhọn, ngoặc vuông, dấu ngoặc kép, dấu hai chấm và dấu phẩy đều ảnh hưởng đến kích thước dữ liệu. Minification loại bỏ khoảng trắng và thụt lề không cần thiết để giảm kích thước, và kết hợp với nén gzip có thể giảm đáng kể kích thước truyền tải. Khi tối ưu hóa kích thước phản hồi API, loại trừ trường không cần thiết và rút ngắn tên khóa cũng là kỹ thuật hiệu quả.