Nội dung chính
Trong thời đại công nghệ hiện đại, hầu hết các ứng dụng phần mềm, dù là website, laptop hay thiết bị di động đều dựa vào định dạng trao đổi phổ biến là JSON. Định dạng này giúp xác định một bộ quy tắc để biểu diễn và truyền dữ liệu qua các ứng dụng, máy chủ hoặc hệ điều hành. Vậy JSON là gì? Và ứng dụng của định dạng dữ liệu này như thế nào?
Đọc bài viết sau đây để được giải đáp chi tiết về:
- Tổng quan về JSON là gì, bao gồm khái quát về định nghĩa, cấu trúc cũng như ứng dụng.
- Cách sử dụng cùng một số ví dụ cơ bản về JSON trong Javascript.
JSON là gì?
JSON là gì? JSON là viết tắt của Javascript Object Notation, là một kiểu định dạng dữ liệu có thể được sử dụng độc lập với Javascript và hầu hết ngôn ngữ lập trình hiện nay đều có thể đọc (phân tích cú pháp) cũng như tạo mã JSON.
JSON thường được sử dụng trong trao đổi dữ liệu điện tử, chẳng hạn như truyền dữ liệu trong các ứng dụng web. Các trang web này hiển thị thông tin được lưu trữ trước trong máy chủ và tương tác với máy chủ bằng các định dạng dữ liệu JSON.
Để hiểu rõ về JSON, bạn sẽ cần có nền tảng cơ bản về HTML, CSS cũng như làm quen với Javascript. Mặc dù JSON được phát triển dựa trên cấu trúc Javascript Object Syntax nhưng nó vẫn là định dạng dữ liệu độc lập.
Cấu trúc cú pháp JSON
Cú pháp JSON cơ bản:
JSON.staticMethod();
Định dạng cấu trúc của JSON gần giống với Javascript Object Literal, tuy nhiên JSON không phụ thuộc vào Javascript. Sự giống nhau này giúp các chương trình viết bằng Javascript dễ dàng được chuyển đổi sang định dạng dữ liệu JSON.
JSON là tập hợp các cặp key – value trong đó key là loại chuỗi và value có thể thuộc bất kỳ loại dữ liệu nào như number, string, boolean, array, object hoặc null. Trong JSON, dữ liệu cặp key-value được phân tách bằng dấu phẩy. Dấu ngoặc nhọn chứa đối tượng và được tách ra khỏi key bằng dấu hai chấm. Dấu ngoặc vuông giữ array và dấu phẩy ngăn cách array khỏi value.
Dữ liệu hợp lệ của JSON có thể ở hai định dạng khác nhau:
- Tập hợp các cặp khóa key-value bao quanh bởi một cặp dấu ngoặc nhọn.
- Tập hợp danh sách có thứ tự các cặp key-value được phân tách bằng dầu phẩy (,) hoặc cặp dấu ngoặc vuông […]
{ "name": "ITviec Blog", "city": "Ho Chi Minh City, Vietnam" }
Tập hợp cặp giá trị bao quanh bởi dấu ngoặc nhọn. (Nguồn: turing.com)
[ { "name": "ITviec Blog", "city": "Ho Chi Minh City, Vietnam" } { "name": "ITviec Blog", "city": "Ho Chi Minh City, Vietnam" } { "name": "ITviec Blog", "city": "Ho Chi Minh City, Vietnam" } ]
Tập hợp danh sách bao bọc bởi dầu ngoặc vuông. (Nguồn: turing.com)
Điểm mạnh và hạn chế của JSON là gì?
JSON sở hữu một số lợi thế như:
- Đơn giản và dễ đọc: JSON bao gồm các cặp key – value, không yêu cầu bất kỳ thẻ, thuộc tính hay lược đồ đặc biệt nào. JSON cũng có thể dễ dàng chuyển đổi sang Object Javascript giúp thuận tiện cho các nhà phát triển web sử dụng Javascript làm ngôn ngữ chính cho ứng dụng web.
- Tương thích và tương tác tốt: JSON được hỗ trợ rộng rãi bởi hầu hết các trình duyệt, máy chủ web và API hiện đại giúp dễ dàng trao đổi dữ liệu trên các hệ thống khác nhau. JSON cũng có thể được sử dụng với nhiều thư viện và công cụ khác nhau cung cấp chức năng phân tích cú pháp và chuyển đổi dữ liệu.
- Hiệu suất và hiệu quả: JSON nhanh và nhẹ hơn XML vì có kích thước nhỏ cũng như đơn giản hơn. JSON không có bất kỳ thông tin dư thừa hoặc không cần thiết nào. Đồng thời, JSON có cú pháp nhỏ gọn và nhất quán hơn. Bên cạnh đó, JSON cũng có thể cải thiện tốc độ và khả năng phản hồi của ứng dụng web.
Bên cạnh đó, cũng có một số điểm còn hạn chế của định dạng JSON như sau:
- Không xử lý lỗi: JSON không có cơ chế xử lý lỗi đối với JSON calls. Xử lý lỗi cũng phụ thuộc vào việc chèn tập lệnh động, nếu không có tính năng này, mã có thể bị lỗi.
- Độ bảo mật: JSON sẽ dễ bị truyền thông tin ra ngoài nếu sử dụng với các trình duyệt hoặc dịch vụ không đáng tin cậy. Do đó, nó làm cho các dịch vụ web dễ bị tấn công bởi các loại tấn công mạng khác nhau.
- Không có loại ngày: Khả năng hiển thị sẽ bị lỗi trong cách hiển thị chuỗi ngày tháng.
- Tính mạnh mẽ: JSON không mạnh bằng cấu trúc dữ liệu XML. Hạn chế này do sự thiếu sẵn có của các lược đồ được tiêu chuẩn hóa.
Ứng dụng của JSON là gì
JSON đã trở nên rất phổ biến hiện nay bởi tính dễ sử dụng và đơn giản. Định dạng dữ liệu JSON đã thay thế XML, vốn được sử dụng khá phổ biến nhưng nặng và khó học. Mặt khác, JSON khiến việc truyền dữ liệu trở nên dễ dàng hơn, cú pháp dễ học và tương thích với ngôn ngữ lập trình khác.
Một số ứng dụng nổi bật của JSON bao gồm:
- Được sử dụng để viết mã trên ứng dụng hoặc trang web dựa theo Javascript. Tiện ích mở rộng trình duyệt như một phần tính năng của chúng.
- Được sử dụng với nhiều ngôn ngữ lập trình hiện đại như Python, Ruby, Java,…
- Cần thiết trong việc chuyển dữ liệu có cấu trúc qua kết nối mạng.
- Thường được dùng để lấy dữ liệu từ máy chủ bằng các ứng dụng web.
- Sử dụng để xuất bản dữ liệu công khai bởi các dịch vụ web.
- Sử dụng để di chuyển từ cơ sở dữ liệu này sang cơ sở dữ liệu khác.
Các loại dữ liệu của JSON
JSON là định dạng dữ liệu được sử dụng rộng rãi cho các trao đổi dữ liệu trên World Wide Web, định dạng dữ liệu này bao gồm bảy loại dữ liệu khác nhau như Number, String, Boolean, Array, Object, Whitespace và Null. Các giá trị cụ thể như sau:
Các giá trị dữ liệu của JSON. (Nguồn: turing.com)
Dữ liệu số (Number)
Dữ liệu số trong JSON là loại dữ liệu được sử dụng để biểu thị các số liệu trong hệ thống tính toán cơ bản. Một số đại diện cho một số nguyên dương, số nguyên âm, dấu cộng đơn giản hay ký hiệu hàm mũ.
- Số nguyên: Bao gồm chữ 0 là các số dương hoặc âm từ 1 đến 9.
- Phân số: Biểu thị các số có dấu thập phân như 5.5, 9.5
- Số mũ: Một số trong JSON có thể có số mũ là 10 và phải có tiền tố dấu mũ là e+, e-, E+, E-
Tuy nhiên, số không thể được biểu diễn dưới dạng chuỗi (string) ở cấu trúc JSON bởi chỉ sử dụng số thập phân làm cho hệ thập lục phân của JSON trở nên lỗi thời.
Ví dụ về cú pháp của dữ liệu số trong JSON là:
{"length": 150.35}
Chuỗi (String)
Chuỗi (String) là một chuỗi gồm các ký tự Unicode được viết theo quy tắc cụ thể. Các chuỗi trong JSON luôn được viết bằng dấu ngoặc kép (“”), tương tự với ngôn ngữ lập trình C. Nếu các chuỗi được đặt trong dấu ngoặc đơn (‘’) sẽ trở nên không hợp lệ. Bạn cũng có thể dùng các ký tự như gạch chéo tiến (\/), gạch chéo ngược (\\), dấu lùi (\b), dòng mới (\n), dấu xuống dòng (\r),…
Ví dụ về loại dữ liệu chuỗi của JSON như sau:
{"name":"Jade"} or {"city":"Accra\/Ghana"}
Boolean
Boolean là một kiểu dữ liệu của JSON có thể tồn tại dưới dạng một trong hai tùy chọn, giá trị của Boolean có thể là đúng (true) hoặc sai (false). Khi sử dụng dữ liệu Boolean, dấu ngoặc kép sẽ không được sử dụng.
Ví dụ về kiểu dữ liệu Boolean như sau:
{"transparency": false} and {"green": true}
Mảng (Array)
Mảng là một tập hợp các giá trị được đặt trong dấu ngoặc vuông [] và phân cách bằng dấu phẩy (,). Mảng bao gồm các giá trị liên quan, nên sử dụng khi key được tạo từ các số nguyên. Bạn có thể bắt đầu lập chỉ mục trong mảng từ 0 hoặc 1.
Ví dụ về loại dữ liệu mảng trong JSON như sau:
{"colors": ["red","orange","yellow","blue"]}
Hoặc:
{"serial numbers": ["302", "303" "305" "306" "307"]}
Đối tượng (Object)
Đối tượng trong JSON được tạo thành từ các tập hợp dữ liệu không có thứ tự hoặc không có cấu trúc, được biểu thị dưới dạng cặp key – value và được đặt ở giữa một cặp dấu ngoặc nhọn {}. Một đối tượng có thể chứa bất kỳ cặp key – value với giá trị từ 0 trở lên. Key phải là kiểu dữ liệu chuỗi và là duy nhất. Khi có nhiều hơn một cặp key – value, tên theo sau bởi dấu hai chấm và được phân cách bằng dấu phẩy.
Ví dụ về Object trong JSON như sau:
{ "participant": {"name": "rose","age": "17","status":"disqualified"} }
Khoảng trắng (Whitespace)
Khoảng trắng chỉ đơn giản là khoảng trắng thông thường được thêm vào đoạn mã để giúp dễ đọc hơn. Khoảng trắng thực tế không ảnh hưởng đến toàn bộ mã hoặc định dạng dữ liệu JSON. Nó có thể được làm giảm đến mức tối thiểu mà không làm hỏng cấu trúc.
Ví dụ về khoảng trắng cụ thể như sau:
{"name": " ITviec Blog "} (khoảng trắng được sử dụng)
{"name": "ITviec Blog"} (khoảng trắng không được sử dụng)
Null
Về mặt kỹ thuật, null không phải là loại giá trị dữ liệu. Tuy nhiên, nó lại được phân loại là một giá trị đặc biệt trong JSON. Null mô tả sự “vắng mặt” của giá trị, tức là không có giá trị nào được gán cho key. Khi sử dụng tiêu đề null thì không cần sử dụng dấu ngoặc kép. Ví dụ cụ thể như sau:
{ "friendly": true "receptive": true "intelligent": null }
Một số ví dụ cơ bản của JSON
Bài tập ví dụ JSON trong kinh doanh
JSON thường được sử dụng trong tình huống kinh doanh khác nhau để xác thực dữ liệu đầu vào cũng như xác minh rằng các thông báo mang dữ liệu được xây dựng chính xác. Chúng thường là đoạn code phức tạp được sử dụng trong API hoặc thỏa thuận trao đổi dữ liệu.
Chẳng hạn với bài tập sau, công ty cố gắng xác nhận rằng chỉ những đơn hàng được tạo chính xác mới được nhập dữ liệu vào hệ thống.
{ "type": "object", "properties": { "name": {"type": "string"}, "sku": {"type": "string"}, "price": {"type": "number", "minimum": 0}, "shipTo": { "type": "object", "properties": { "name": {"type": "string"}, "address": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"} } }, "billTo": { "type": "object", "properties": { "name": {"type": "string"}, "address": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"} } } } }
Ở ví dụ trên, có thể thấy:
- Khóa “type” được đặt thành “object”, cho biết lược đồ này mô tả một cấu trúc dữ liệu phức tạp.
- Khóa “properties” xác định các thuộc tính bên trong đối tượng này và kiểu dữ liệu của chúng.
- “name”: Thuộc tính này có thể đại diện cho tên và phải là chuỗi.
- “sku”: Có thể là một đơn vị lưu kho (mã định danh cho sản phẩm) và phải là chuỗi.
- “price”: Thuộc tính này đại diện cho giá và phải là số. Nó cũng có ràng buộc giá trị tối thiểu là 0, đảm bảo giá không âm.
- “shipTo” và “billTo”: Những thuộc tính này đều là các đối tượng riêng biệt, cho biết các cấu trúc lồng nhau. Chúng có thể đại diện cho địa chỉ giao hàng và thanh toán.
- Mỗi cấu trúc lồng nhau đều có cùng cấu trúc “type” và “properties”
- Đồng thời, “name”, “address”, “city”, “state”, “zip” thể hiện cho một cấu trúc địa chỉ đầy đủ.
Bài tập nhóm dữ liệu trong JSON
Nhóm dữ liệu trong JSON được thực hiện bằng cách sử dụng các cấu trúc lồng nhau. Chẳng hạn như bài tập ví dụ về thuộc tính của chiếc bánh donut bên dưới.
{ "id": "0009", "type": "donut", "name": "Cake", "image": { "url": "images/0009.jpg", "width": 300, "height": 300 }, "thumbnail": { "url": "images/thumbnails/0009.jpg", "width": 42, "height": 42 } }
Ở ví dụ trên, đoạn code sử dụng cặp giá trị key – value để lưu trữ thông tin, mỗi key tương ứng từng thuộc tính của chiếc bánh và các giá trị có thể là chuỗi, số hoặc đối tượng JSON.
- id: Mã định danh duy nhất cho chiếc bánh donut (kiểu chuỗi, giá trị “0009”).
- type: Loại bánh (kiểu chuỗi, giá trị “donut”).
- name: Tên bánh (kiểu chuỗi, giá trị “Cake”).
- image: Thông tin về ảnh đại diện của bánh.
- url: Đường dẫn đến ảnh (kiểu chuỗi, giá trị “images/0009.jpg”).
- width: Chiều rộng ảnh (kiểu số, giá trị 300).
- height: Chiều cao ảnh (kiểu số, giá trị 300).
- thumbnail: Thông tin về ảnh thu nhỏ của bánh.
- url: Đường dẫn đến ảnh thu nhỏ (kiểu chuỗi, giá trị “images/thumbnails/0009.jpg”).
- width: Chiều rộng ảnh thu nhỏ (kiểu số, giá trị 42).
- height:Chiều cao ảnh thu nhỏ (kiểu số, giá trị 42).
Cách sử dụng JSON trong API và Javascript
APIs Call
Một trong những cách sử dụng JSON phổ biến là sử dụng API cả trong yêu cầu và phản hồi. Nó nhỏ gọn hơn nhiều so với các tiêu chuẩn khác và cho phép sử dụng trong các trình duyệt web vì Javascript có thể dễ dàng phân tích các chuỗi JSON, chỉ cần yêu cầu JSON.parse() để bắt đầu sử dụng.
JSON.parse(string) lấy một chuỗi JSON hợp lệ và trả về một đối tượng Javascript. Ví dụ có thể được gọi trong phần nội dung của phản hồi API cung cấp cho bạn một đối tượng có thể sử dụng được. Nghịch đảo của hàm này là JSON.stringify(object) lấy một đối tượng Javascript và trả về một chuỗi JSON.
{ "foo": { "bar": "data", "baz": "data" } }
Xem thêm: API là gì? 4 đặc điểm nổi bật của API
Javascript
Trong một số trường hợp, bạn muốn tải JSON từ một tệp, chẳng hạn như tệp cấu hình hoặc dữ liệu mô phỏng. Bạn có thể xuất Object Javascript giống như JSON bạn đang muốn tải từ tệp Javascript:
export const data = {"foo": "bar"}
Lúc này, đối tượng sẽ được lưu trữ trong dữ liệu và có thể truy cập được trong toàn bộ ứng dụng của bạn bằng cách sử dụng các câu lệnh hoặc nhập yêu cầu. Tuy nhiên, bạn nên lưu ý rằng thao tác sẽ nhập một bản sao dữ liệu, do đó việc sửa đổi đối tượng sẽ không ghi dữ liệu trở lại vào tệp, hoặc cho phép sử dụng dữ liệu đã sửa đổi trong các tệp khác.
Các câu hỏi thường gặp về JSON là gì
Khi nào nên sử dụng JSON?
Khi bạn muốn lưu trữ dữ liệu đơn thuần dưới dạng metadata, chuỗi JSON sẽ lưu vào database sau đó khi cần dữ liệu, bạn chỉ cần giải mã chúng. Chẳng hạn, với PHP sẽ cung cấp các hàm liên quan đến JSON để mã hóa.
Ngoài ra, trong Javascript khi dữ liệu được định dạng trong format JSON xuất hiện trong các yêu cầu AJAX, cũng là một trường hợp khá phổ biến để người dùng sử dụng JSON.
JSON và Object Javascript có giống nhau không?
Định dạng dữ liệu JSON được lấy từ cấu trúc đối tượng (object) Javascript, tuy nhiên định dạng JSON cũng có thể được truy cập và tạo bởi các ngôn ngữ lập trình khác. Do đó, JSON và Object Javascript không giống nhau.
Một số đặc điểm về Object Javascript và JSON như sau:
JSON | Object Javascript |
Cặp key – value phải nằm trong dấu ngoặc kép | Cặp key – value có thể không có dấu ngoặc kép |
Không thể chứa các hàm | Có thể chứa các hàm |
Có thể được tạo và sử dụng bởi các ngôn ngữ lập trình khác | Chỉ có thể được sử dụng trong Javascript |
Sửa lỗi trong mã JSON như thế nào?
Khi viết mã JSON, chắc hẳn bạn sẽ gặp phải những lỗi về phân tích cú pháp dữ liệu JSON thành Object Javascript. Khi gặp lỗi, bạn hãy kiểm tra lại thật kỹ cấu trúc mã cũng như định dạng dữ liệu JSON. Bạn cũng có thể xác định định dạng của dữ liệu JSON bằng cách sử dụng các phần mềm kiểm tra như JSON Linter.
Tổng kết về JSON là gì
JSON là một định dạng dữ liệu đơn giản, nhẹ và dễ dàng sử dụng trong quá trình lập trình web. Với khả năng tương thích với đa số các ngôn ngữ lập trình hiện nay, JSON đã trở thành phần mềm hữu ích để truyền tải và lưu trữ dữ liệu giữa máy chủ với trình duyệt.
Hy vọng qua bài viết, bạn sẽ có góc nhìn tổng quan hơn về định dạng dữ liệu JSON là gì cũng như những tiện ích của chúng. Nếu bạn đang có định hướng trở thành Web Developer hoặc phát triển một ứng dụng web, có thể cân nhắc sử dụng JSON để tối ưu cũng như đơn giản hóa quá trình xử lý dữ liệu nhé!
Xem thêm: Javascript là gì? Học Javascript cơ bản với lộ trình dễ hiểu nhất