1. Json là gì?
JSON - Viết tắt của JavaScript Object Notation nó là một chuẩn để định dạng dữ liệu, về mặt này, có thể so sánh JSON với XML YAML… Nhưng khi JSON đi với JavaScript hoặc ActionScript thì nó có tính ưu việt hơn hẳn.
Tại sao JSON có liên quan đến JavaScript, ActionScript. Đơn giản là vì dữ liệu được định dạng JSON chính là cách biểu diễn một đối tượng trong các Scripting Language này.
Khi sử dụng JSON với JavaScript hay ActionScript, không cần phải có các bước phân tích phức tạp như đối với XML mà có thể truy vấn trực tiếp giá trị theo tên (khóa) được định nghĩa trong JSON.
JSON cũng như XML, nó chỉ mô tả dữ liệu, không có khả năng trình bày, không có khả năng tự chạy, nói chung là thụ động. Ta chỉ có thể nhận JSON rồi làm gì đó, hoặc ta có gì đó rồi chuyển thành JSON để gửi đi, chứ ta không thể chạy JSON, Ví dụ:
{
Nhom1: [
{ hoten: "Nguyen Van A", tuoi: 21, nam: true, nhomMau: "O" },
{ hoten: "Tran Van B", tuoi: 22, nam: true, nhomMau: "A" },
{ hoten: "Le Thi C", tuoi: 23, nam: false, nhomMau: "AB" }
],
Nhom2: [
{ hoten: "Huynh Van D", tuoi: 24, nam: true, nhomMau: "B" },
{ hoten: "Ngo Thi E", tuoi: 22, nam: false, nhomMau: "A" },
]
}
Trên đây là một ví dụ, mô tả thông tin về hai nhóm, trong nhóm có những thông tin thành viên như: họ tên, tuổi, giới tính, nhóm máu. Những thông tin trên được diễn đạt bằng những kiểu dữ liệu cơ bản của Javascript: chuỗi, số, mảng, đối tượng. Vậy JSON là một kiểu mô tả dữ liệu dựa trên cơ sở là Javascript. Tuy nhiên JSON có cú pháp và quy định riêng.
2. Kiểu dữ liệu của Json
Json có 5 kiểu dữ liệu chính
- Number: kiểu số bao gồm số nguyên và số thực.
- String: kiểu chuỗi, nội dung bao bởi cặp dấu nháy kép “, những ký tự đặt biệt được escape bởi dấu \.Theo chuẩnJSON thì không sử dụng dấu nháy đơn như Javascript để bọc chuỗi.
- Boolean: kiểu luận lý bao gồm 2 giá trị là true và false
- Array: kiểu mảng, gồm các phần tử phân cách nhau bởi dấu phẩy ‘,’ và mảng được bao bởi cặp dấu [ và ].
- Object: kiểu đối tượng, gồm những cặp giá trị đi cùng nhau, mỗi cặp phân cách bởi dấu phẩy’,’, đối tượng được bao bởi cặp dấu { và }, cặp giá trị bao gồm tên và giá trị được phân cách bởi dấu hai chấm’:’.
- Null: giá trị null.
Phân tích ví dụ trên ta thấy:
- tuoi(tuổi) kiểu dữ liệu là Number
- hoten(họ tên) kiểu dữ liệu là String
- nam(giới tính) kiểu dữ liệu là Boolean
- Nhom1(Nhóm 1), Nhom2(Nhóm 2) kiểu dữ liệu làArray
- { hoten: “Nguyen Van A”, tuoi: 21, nam: true, nhomMau: “O” } là một kiểu Object
- hoten: “Nguyen Van A” là một cặp giá trị của một Object, hoten là tên thuộc tính, “Nguyen Van A” là giá trị của thuộc tính đó
- Nhom1: [...] và Nhom2: [...] cũng được xem là những cặp giá trị
Kiểu ngày tháng:
Do JSON là một chuẩn chung tức là không phụ thuộc nền tảng hay công nghệ, vì vậy Jsonkhông định ra một kiểu thời gian cụ thể. Do mỗi ngôn ngữ lập trình, mỗi nền tảng triển khai có sự quy định về kiễu dữ liệu ngày tháng khác nhau. Như Javascript lưu trữ kiểu Date chỉ từ 1-1-1970 trở đi hoặc như PHP thì không có kiểu dữ liệu Date, Date chỉ là một con số chỉ ra số millisecond tính từ 1-1-1970 (với phiên bản 5.1.0 thì từ 13-12-1901), còn .NET thì có giới hạn ngày gần như rộng nhất. Chính vì không thể quy định được nên cách gửi-nhận kiểu dữ liệu ngày tháng (Date) bằng JSON cũng khác nhau.
3. Ưu điểm của Json
- Có thể đọc hiểu được (human-readability).
- Là kiểu dữ liệu trên nền cơ sở Javascript nên dễ dàng tiếp cận.
- Dữ liệu truyền tải ngắn gọn so với những định dạng dữ liệu khác như: xml, html…
- Dễ dàng chuyển đổi(parse) dữ liệu từ dạng chuỗi (nhận từ server) sang dữ liệu có thể sử dụng được (thành Object, Number, Array)…
- Dễ truy cập nội dung.
- Với những ứng dụng Ajax lấy và xử lý dữ liệu từ một web service nào đó khác domain: Nếu nội dung trả về có dạng xml thì javascript từ trang web của chúng ta không thể trực tiếp truy cập mà phải nhờ một proxy để đáp ứng yêu cầu của same origin policy.Nhưng nếu là dạng JSON thì đó không là vấn đề. (Thường dùng lệnh eval).
- Hai công nghệ phổ biến sử dụng JSON là PHP và .NET
4. So sánh JSON và XML
- XML tiên phong trong lĩnh vực chuẩn hóa, mô tả dữ liệu, có thể nói XML là sự cách mạng trong việc định dạng và mô tả dữ liệu hiện nay, có khá nhiều ứng dụng sử dụng XML để lưu trữ, ngay như HTML cũng có phần "na ná" như XML hoặc sự ra đời XHTML là kết hợp của HTML viết theo cú pháp đúng chuẩn XML. XML có nhiều ưu điểm vậy, liệu JSON có là đối thủ ? Tất nhiên sự có mặt của JSON không hoàn toàn thay thế được với lão làng XML, nhưng trong một phạm vi nhỏ, những ứng dụng về ajax.
- Ứng dụng ajax nhằm mục đích giúp thời gian tương tác giữa người sử dụng với ứng dụng tiến gần đến thời gian thực (chớp mắt là thấy), cho nên tốc độ được đặt lên hàng đầu, việc tăng tốc bằng cách "giảm tải" cũng là một giải pháp, chính vì vậy JSON được ưu ái hơn vì cú pháp ngắn gọn, đơn giản, tiết kiệm hơn XML, ví dụ trên nếu mô tả bằng XML.
<Object>
< Property>
<Key>Nhom1</Key>
<Array>
<Object>
<Property>
<Key>hoten</Key>
<String>Nguyen Van A</String>
</Property>
<Property>
<Key>tuoi</Key>
<String>21</String>
</Property>
<Property>
<Key>nam</Key>
<Number>true</ Number >
</Property>
<Property>
<Key>nhommau</Key>
<Boolean>O</ Boolean >
</Property>
</Object>
</Array>
</ Property >
</Object>
- Đây chỉ là mô tả về một đối tượng “Nguyễn Văn A” trong “Nhom1”, mã dữ liệu dài dòng và khó đọc, đó cũng là khuyết điểm của XML.
- Một lợi điểm nữa của JSON so với XML là có cách phân tích xử lý đơn giản, chỉ qua 1 bước (chuyển chuỗi nhận được từ máy chủ sang dữ liệu có thể sử dụng được), còn XML thì phải mất những 3 bước:
- Tạo một đối tượng xử lý XML, mỗi trình duyệt có trình xử lý XML khác nhau, nên cần phải có kinh nghiệm.
- Chuyển chuỗi nhận từ máy chủ thành cấu trúc những đối tượng thẻ của XML.
- Dựa trên cấu trúc XML đã chuyển, lại chuyển tiếp thành dữ liệu có thể sử dụng được.