Hướng dẫn

Nếu bạn lần đầu ghé thăm blog của mình, bạn có thể vào phần hướng dẫn để biết thêm thông tin và cách sử dụng blog này.

Thứ Tư, 27 tháng 10, 2010

JSON, đơn giản là JSON

JSON hay còn gọi là JavaScript Object Notation, là một chuẩn dùng để truyền tải dữ liệu. Vậy hóa ra JSON chả làm được gì rồi, đúng vậy, thực tế thì anh JSON này chả có chút "võ công" gì cả, thế mà "giang hồ" lại đồn đại là anh này "mạnh lắm", làm được "nhiều thứ" lắm thì không chính xác "lắm". JSON là một dạng văn bản thuần, mô tả về một loại thông tin nào đó mà "con người" có thể đọc được(human-readability, còn con khác thì không đọc được nhá).


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 "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. Để hiểu rõ hơn ta "mần" một ví dụ:
{
    giaDinhChuChin: [
        { lam: "Cha", ten: "Chín", tuoi: 50, nam: true, nhomMau: "O" },
        { lam: "Mẹ", ten: "Tái", tuoi: 49, nam: false, nhomMau: "A" },
        { lam: "Con", ten: "Tèo", tuoi: 15, nam: true, nhomMau: "AB" },
        { lam: "Con", ten: "Tủm", tuoi: 14, nam: false, nhomMau: "O" }
    ],
    giaDinhChuMuoi: [
        { lam: "Độc thân vui tính", ten: "Mười", tuoi: 35, nam: true, nhomMau: "B" }
    ]
}
Trên đây ta có một ví dụ nhỏ, mô tả thông tin về 2 gia đình, trong gia đình có những thông tin thành viên như: cha, mẹ, con. 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. Tất nhiên dựa trên cơ sở thì không có nghĩa là giống hoàn toàn. JSON có những cú pháp và quy định riêng của nó:

Kiểu dữ liệu
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 \). Chú ý là theo chuẩn JSON 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 đúng true và sai 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, không có gì cả)

Phân tích ví dụ trên các bạn có thể thấy
Qua ví dụ, bạn đã hình dung cách biểu diễn các giá trị trong JSON, bạn có thể tham khảo thêm tại Wikijson.org.
Nhưng có một điểm, bạn sẽ thắc mắc là, tại sao không có kiểu dữ liệu ngày tháng, trong khi ngày tháng lại được sử dụng khá nhiều và Javascript có trang bị kiểu dữ liệu ngày tháng nhưng sao JSON lại không ?

Trình bày kiểu ngày tháng
Trước hết mình xin giải thích, do JSON là một chuẩn chung có nghĩa là không phụ thuộc nền tảng hay công nghệ, chính vì vậy đó là điểm "khó xử" cho JSON. JSON không thể định ra rằng một kiểu thời gian thì phải ra sao, do mỗi ngôn ngữ lập trình, mỗi nền tảng triển khai có sự quy định về Date khác nhau, đơn cử như Javascript lưu trữ kiểu Date chỉ từ 1-1-1970 trở đi (giới hạn trên mình không nêu ra) hoặc như PHP thì chả 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 anh .NET thì có giới hạn ngày gần như rộng nhất. Do vậy, mỗi nhà mỗi cảnh, không thể quy định được, chính vì không thể quy định được nên cách gửi / nhận Date bằng JSON cũng khác nhau


Mình xin đơn cử 2 công nghệ chính là PHP và .NET

.NET
Khi từ ngôn ngữ server chuyển thành JSON, một số trình chuyển hóa sẽ biến đối tượng DateTime của bạn thành dạng "\/Date(milliseconds)\/", nội dung milliseconds sẽ là số mili giây tính từ 00:00 ngày 01-01-1970
Lấy ví dụ
DateTime vnWomanDay = new DateTime(2010, 10, 20); // sau khi chuyển sẽ thành "\/Date(1292778000000)\/"

PHP
Một số giải pháp đưa ra như: chuyển đổi giá trị Date thành một con số chứa giá trị millisecond
{ myDateValue: 1292778000000 }
Hoặc chuyển thành một chuỗi chứa thông tin ngày tháng đại loại như "10/20/2010"

Lợi điểm khi dùng JSON
Tất nhiên một chuẩn khi đưa ra thì phải có những lợi điểm nhất định
  1. "Con người" có thể đọc được.
  2. Có bà con với Javascript nên không xa lạ, dễ học, dễ hiểu
  3. Dữ liệu truyền tải ngắn gọn (có thể là tiết kiệm nhất) so với những định dạng dữ liệu khác như: XML, HTML...
  4. Việc phân tích (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ễ dàng.

    JSON so với XML
    XML là một "lão làng" 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>giaDinhChuChin</Key>
        <Array>
          <Object>
            <Property>
              <Key>lam</Key>
              <String>Cha</String>
            </Property>
            <Property>
              <Key>ten</Key>
              <String>Chín</String>
            </Property>
            <Property>
              <Key>tuoi</Key>
              <Number>50</Number>
            </Property>
            <Property>
              <Key>nam</Key>
              <Boolean>true</Boolean>
            </Property>
            <Property>
              <Key>nhomMau</Key>
              <String>O</String>
            </Property>
          </Object>
        </Array>
      </Property>
    </Object>
    Đây chỉ là đoạn mô tả về chú Chín, mã dữ liệu đã dài như rắn và khó đọc nữa, một vote cho JSON.

    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 "mì ăn liề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 tốn 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.

    Lời kết
    Với những ưu điểm trên, có lẽ "đàn em"  JSON tạm qua mặt được "đàn anh" XML, nhưng mình cũng xin lưu ý, việc chuẩn hóa dữ liệu là một chuyện, việc sử dụng dữ liệu là chuyện khác, không nhất thiết khi phát triển ứng dụng ajax, ta phải sử dụng JSON, mà đôi lúc cần sử dụng XML và những chuẩn khác theo nhu cầu công việc. Đừng nhất nhất "ăn theo" mốt thời thượng do người khác đặt ra.

    Tham khảo thêm
    Thư viện phân tích JSON bằng Javascript, tham khảo cách sử dụng tại đây
    Cách dùng jQuery để phân tích JSON

    Không có nhận xét nào:

    Đăng nhận xét

    Related Posts Plugin for WordPress, Blogger...

    Hãy nói không với 4T

    Hướng dẫn sử dụng chức năng góp ý
    Bạn có thể sử dụng những thẻ <b>, <i>, <a>. Để chú thích đoạn mã bạn có thể sử dụng thẻ [code=type]  [/code], với type là những loại mã sau js, css, html. Chú ý: Khi sử dụng thẻ [code=html] bạn cần theo thế những ký tự < , > thành [] hoặc bạn có thể sử dụng bộ chuyển đổi. Những loại mã khác thì bạn thay thế < , > thành &lt;&gt; hoặc bạn cũng có thể sử dụng bộ chuyển đổi