JSON là gì và vì sao dữ liệu trên web toàn dùng JSON?

Trang chủ / Blog / JSON là gì và vì sao dữ liệu trên web toàn dùng JSON?
JSON là gì và vì sao dữ liệu trên web toàn dùng JSON
Đối tượng JSON với các cặp khóa và giá trị nối laptop với điện thoại.

Mỗi lần bạn mở một trang bán hàng, lướt bảng tin hay xem tỉ giá, trình duyệt đang âm thầm trao đổi với máy chủ bằng những đoạn văn bản ngắn gọn mà cả người và máy đều đọc được. Định dạng đứng sau phần lớn những lần trao đổi đó có tên là JSON.

JSON là viết tắt của JavaScript Object Notation, tạm dịch là ký hiệu đối tượng của JavaScript. Cái tên này dễ gây hiểu lầm, vì JSON chỉ mượn cú pháp từ JavaScript rồi tách ra thành một định dạng độc lập với ngôn ngữ lập trình. Chuẩn hiện hành của JSON là RFC 8259, ban hành tháng 12/2017 với tên gọi STD 90, thống nhất với chuẩn ECMA-404. Douglas Crockford đặt tên và phổ biến JSON vào đầu những năm 2000, thông điệp JSON đầu tiên được gửi vào tháng 4/2001.

JSON đọc như thế nào: cặp khóa và giá trị

Cách đọc JSON bắt đầu từ cặp khóa và giá trị, giống như một nhãn dán kèm nội dung. Khóa là tên gọi đặt trong dấu ngoặc kép, tiếp theo là dấu hai chấm, rồi đến giá trị. Một đối tượng là tập hợp các cặp khóa và giá trị đặt trong cặp dấu ngoặc nhọn, còn một mảng là danh sách các giá trị đặt trong cặp dấu ngoặc vuông, ngăn cách nhau bằng dấu phẩy. Ví dụ xuyên suốt của bài viết là một sản phẩm áo thun:

{"ten": "Ao thun cotton", "gia": 299000, "con_hang": true, "kich_co": ["S", "M", "L"]}

Đọc từ trái sang phải, đoạn trên cho biết tên sản phẩm là áo thun cotton, giá là 299.000 đồng, trạng thái còn hàng là đúng, và danh sách cỡ gồm ba cỡ S, M, L. Cấu trúc lồng nhau cũng đọc theo cách đó: một đối tượng có thể chứa một đối tượng khác, một mảng có thể chứa nhiều đối tượng, và cứ thế tạo thành cây dữ liệu nhiều tầng.

Các hộp lưu trữ có gắn thẻ tên đặt trên kệ, một hộp mở ra cho thấy một chiếc áo thun
Một bản ghi JSON giống dãy hộp có gắn thẻ: mỗi thẻ là một khóa, nội dung trong hộp là giá trị đi kèm.

Sáu kiểu dữ liệu và vài luật viết chặt chẽ

JSON chỉ có sáu kiểu dữ liệu. Chuỗi ký tự đặt trong dấu ngoặc kép. Số viết trực tiếp, không có dấu ngoặc kép. Giá trị đúng/sai viết là true hoặc false. Giá trị null nghĩa là khóa có mặt nhưng chưa có giá trị. Đối tượng là tập hợp cặp khóa và giá trị trong dấu ngoặc nhọn, còn mảng là danh sách có thứ tự trong dấu ngoặc vuông.

Luật viết JSON chặt chẽ hơn vẻ ngoài đơn giản của JSON. Khóa và chuỗi bắt buộc dùng dấu ngoặc kép, dấu ngoặc đơn không được chấp nhận. Phần tử cuối cùng trong đối tượng hay mảng không được có dấu phẩy thừa phía sau. JSON không có cú pháp chú thích, vì vậy ghi chú giải thích phải nằm ngoài file JSON, trong tài liệu đi kèm. Văn bản JSON mã hóa bằng UTF-8 theo RFC 8259. Để kiểm tra cú pháp, bạn có thể dán đoạn JSON vào công cụ Làm đẹp và Định dạng JSON của Công Cụ Việt.

Sáu khay phân loại chứa các hình khác nhau: thẻ chữ, chip số, công tắc, khay rỗng, chồng danh sách và hộp lồng nhau
Sáu kiểu dữ liệu của JSON mô tả được hầu hết dữ liệu trên web, từ giá tiền đến cây danh mục nhiều tầng.

Vì sao web chọn JSON thay vì XML

Trước khi JSON phổ biến, XML là định dạng trao đổi dữ liệu được dùng rộng rãi. XML bọc mỗi giá trị trong một cặp thẻ mở và thẻ đóng mang tên của giá trị đó. Cách bọc này chặt chẽ nhưng khiến văn bản dài ra nhanh chóng khi dữ liệu chỉ là danh sách các cặp khóa và giá trị.

Cùng một sản phẩm áo thun trong ví dụ xuyên suốt, bản JSON gọn trong 77 ký tự, trong khi bản XML cùng nội dung dài 148 ký tự, gần gấp đôi, chỉ vì mỗi giá trị phải mang thêm thẻ mở và thẻ đóng. Khi một trang web tải hàng trăm sản phẩm cùng lúc, phần chênh lệch này cộng dồn thành dung lượng đáng kể trên mỗi lần tải trang. Cấu trúc đối tượng và mảng của JSON khớp trực tiếp với cấu trúc dữ liệu trong bộ nhớ của các ngôn ngữ lập trình, nên việc chuyển đổi gần như không tốn công sức. XML vẫn giữ vị trí trong những nơi cần kiểm tra cấu trúc chặt chẽ bằng lược đồ hoặc cần không gian tên để phân biệt các từ vựng khác nhau. Bài so sánh công cụ chuyển đổi CSV sang JSON trên Công Cụ Việt cũng cho thấy lựa chọn đúng phụ thuộc vào dữ liệu cụ thể. Khi cần chuyển đổi qua lại, công cụ Chuyển đổi JSON sang XML của Công Cụ Việt xử lý việc này ngay trên trình duyệt.

Hai kiện hàng đặt hai bên một chiếc cân, một kiện nhỏ gọn và một kiện lớn cồng kềnh quấn nhiều lớp
Cùng một nội dung, bản XML dài gần gấp đôi bản JSON vì mỗi giá trị phải mang thêm thẻ mở và thẻ đóng.

JSON đi từ máy chủ tới trình duyệt ra sao

Một lần tải dữ liệu bằng JSON thường diễn ra theo bốn bước. Trình duyệt gửi một yêu cầu tới địa chỉ API của máy chủ, kèm theo thông tin cần lấy, chẳng hạn mã sản phẩm. Máy chủ truy vấn cơ sở dữ liệu, xếp kết quả thành văn bản JSON rồi gửi trả kèm mã trạng thái. Trình duyệt nhận văn bản, phân tích thành đối tượng trong bộ nhớ rồi điền từng giá trị vào đúng vị trí trên trang.

Trong JavaScript, JSON.parse biến văn bản JSON thành đối tượng để chương trình dùng được, còn JSON.stringify biến đối tượng thành văn bản JSON để gửi đi. Các ngôn ngữ khác có cặp hàm tương đương, và chính sự thống nhất này giúp một API viết bằng một ngôn ngữ phục vụ được ứng dụng viết bằng ngôn ngữ khác. JSON cũng là cầu nối giữa bảng tính và ứng dụng web: Công cụ Chuyển đổi CSV sang JSON của Công Cụ Việt nhận bảng CSV đầu vào và trả về JSON đúng cấu trúc để dùng ngay.

Cửa sổ trình duyệt nhận một gói dữ liệu có cấu trúc từ một dãy máy chủ qua mạng
Trình duyệt gửi yêu cầu, máy chủ trả về văn bản JSON, trình duyệt phân tích văn bản đó thành dữ liệu hiển thị.

Những lỗi người mới hay gặp

Lỗi gặp nhiều nhất là dấu phẩy thừa sau phần tử cuối cùng. Nhiều ngôn ngữ lập trình cho phép dấu phẩy cuối, nhưng JSON thì không, và một dấu phẩy thừa cũng đủ làm toàn bộ đoạn JSON không đọc được. Lỗi thường gặp tiếp theo là dùng dấu ngoặc đơn cho khóa hoặc chuỗi, hoặc quên dấu ngoặc kép quanh khóa khi viết theo thói quen của JavaScript. Trình phân tích dừng ở ký tự đầu tiên sai luật, nên cách tìm lỗi nhanh nhất là rà ngược từ vị trí mà trình báo lỗi chỉ ra.

Nhóm lỗi thứ hai liên quan đến kiểu dữ liệu. Số điện thoại, mã bưu chính hay mã căn cước có số 0 ở đầu phải lưu dưới dạng chuỗi, vì lưu dưới dạng số sẽ làm mất số 0 ở đầu và có thể làm tròn những con số rất dài. Ngày tháng cũng cần lưu dưới dạng chuỗi, thường theo định dạng ISO 8601 như 2026-11-01T18:05:00+07:00, vì JSON không có kiểu ngày tháng riêng.

Kính lúp soi một đoạn dữ liệu JSON, trong đó một dấu phẩy cuối thừa được tô đỏ
Một dấu phẩy thừa sau phần tử cuối cùng cũng đủ làm toàn bộ đoạn JSON không đọc được.

Khi nào JSON không phải lựa chọn đúng

JSON tỏ ra kém phù hợp khi dữ liệu chủ yếu là nhị phân, như ảnh, video hay file âm thanh. Nhét dữ liệu nhị phân vào JSON buộc phải mã hóa Base64, làm dung lượng tăng thêm khoảng một phần ba và tốn thêm bước mã hóa ở cả hai phía. Trong những trường hợp đó, gửi file nhị phân trực tiếp sẽ hiệu quả hơn nhiều.

JSON cũng không phải là lựa chọn tốt cho file cấu hình cần nhiều ghi chú giải thích, vì JSON không có cú pháp chú thích. JSON5 hay JSONC bổ sung chú thích và dấu phẩy cuối, còn YAML cho phép ghi chú, nhưng các biến thể này không còn là JSON chuẩn. Với luồng dữ liệu lớn gửi liên tục, định dạng NDJSON, mỗi dòng là một đối tượng JSON riêng, xử lý từng dòng ngay khi nhận được, tỏ ra phù hợp hơn một văn bản JSON khổng lồ phải chờ tải xong mới đọc được.

Ngã ba đường với một hướng dẫn tới dữ liệu văn bản có cấu trúc và một hướng dẫn tới các file nhị phân lớn như ảnh và video
JSON hợp với dữ liệu văn bản có cấu trúc, còn ảnh, video và file nhị phân lớn nên đi bằng con đường riêng.

Checklist áp dụng nhanh

  • Trước khi gửi dữ liệu, kiểm tra cú pháp bằng công cụ định dạng JSON, chú ý dấu phẩy cuối và dấu ngoặc kép quanh khóa.
  • Lưu số điện thoại, mã có số 0 ở đầu và ngày tháng dưới dạng chuỗi theo định dạng ISO 8601, không lưu dưới dạng số.
  • Khi dữ liệu là ảnh, video hay file nhị phân lớn, gửi file trực tiếp, không nhét dữ liệu nhị phân vào JSON.

Câu hỏi thường gặp

JSON có giới hạn độ dài số không, và số rất dài như mã giao dịch thì xử lý ra sao? Nhiều trình phân tích đọc số dưới dạng số thực dấu phẩy động, nên số nguyên vượt quá 2 lũy thừa 53 có thể bị làm tròn. Cách an toàn là lưu mã giao dịch và mã định danh dài dưới dạng chuỗi.

File JSON dung lượng lớn mở bằng gì để không làm treo trình soạn thảo? Với file hàng chục MB trở lên, công cụ dòng lệnh như jq hoặc chương trình đọc theo luồng sẽ ổn định hơn trình soạn thảo thông thường.

API trả về JSON nhưng trình duyệt hiển thị văn bản thô thay vì giao diện, nguyên nhân thường nằm ở đâu? Nguyên nhân thường nằm ở tiêu đề Content-Type: máy chủ gửi application/json mà không có trang web bao quanh, nên trình duyệt hiển thị đúng văn bản JSON đó. Muốn thấy giao diện, bạn cần mở trang web gọi API.

Các ví dụ trong bài dùng dữ liệu minh họa cho một sản phẩm áo thun, và con số so sánh độ dài JSON với XML được tính trên đúng mẫu dữ liệu đó.

Khi đã nắm được cấu trúc JSON, nhu cầu thực tế thường gặp nhất là biến một bảng tính CSV thành đúng định dạng này để nạp vào hệ thống khác. Phần so sánh 3 công cụ chuyển đổi CSV sang JSON sẽ giúp bạn chọn cách làm gọn nhất cho trường hợp của bạn.

Bình luận vui vẻ - Yêu cầu nâng cấp

Cáo trợ lý