JSON là gì?


1. Tên gọi

Viết tắt của JavaScript Object Notation (dịch sơ sơ là đối tượng JavaScript). Thực ra chỉ là dịch chơi, còn không cứ gọi là JSON.

Xem thêm ở đây http://www.json.org/

2. Nó là gì?

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 thành chuỗi JSON chính là cách biểu diễn một đối tượng trong các Scripting Language này.

3. Lợi ích của JSON

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.

Ví dụ:

Bạn có một dữ liệu XML:

<data>
<x>2</x>
<y>3</y>
</data>

Sử dụng JavaScript để đọc dữ liệu này, bạn phải qua một bước phân tích, đưa văn bản XML thành một đối tượng dữ liệu và đọc dữ liệu theo nodes. Giả sử object của bạn là xmlObj, bạn muốn lấy dữ liệu x và y bạn sẽ gọi:

var x = xmlObj.childNodes[0].text;
var y = xmlObj.childNodes[1].text;

Trong trường hợp tương tự, bạn có một dữ liệu JSON:

var jsonStr = '{ data : { x : 2 , y : 3}}';

Sử dụng JavaScript bạn chỉ cần gọi:

eval( 'var jsonObj = ' + jsonStr + ';');
var x = jsonObj.x;
var y = jsonObj.y;

JSON là một chuẩn cực kỳ quan trọng trong lập trình web ở phía client.

Đối với lập trình viên client script. JSON rút ngắn thời gian viết mã JS, AS hơn là sử  dụng XML.

4. Nên sử dụng JSON trong những tình huống nào

  1. Lưu trữ dữ liệu đơn thuần. Đó là khi bạn muốn lưu trữ dữ liệu dưới dạng metadata ở phía server. Chuỗi JSON sẽ được lưu vào database và sau đó khi cần dữ liệu thì sẽ được giải mã. Ví dụ với PHP, cung cấp các hàm liên quan đến JSON để mã và giải mã là json_encode và json_decode.
    • Chú ý: phương pháp này cũng tương tự như sử dụng tính năng serialize và unserialize của PHP. Nhưng trong khi serialize và unserialize sử dụng với cả dữ liệu và biến, tức là phụ thuộc vào ngôn ngữ lập trình là PHP và dĩ nhiên không thể transfer sang ngôn ngữ lập trình khác để unserialize được. Vì vậy, nếu dữ liệu của bạn chỉ đơn thuần là dữ liệu cơ bản (chuỗi kí tự, số…) thì bạn hoàn toàn không nên sử dụng serialize mà nên sử dụng JSON.
  2. Sử dụng JavaScript, ActionScript để xử lý thông tin trả về từ phía server. Rất nhanh và rất dễ dàng.

 



18 bình luận cho “JSON là gì?”

  1. em đang tìm hiều về JSON và so sánh nó với XML , anh có thể cho em biết rõ hơn nó khác nhau chỗ nào từng cái dc không. Cảm ơn

  2. em đang tìm hiều về JSON và so sánh nó với XML , anh có thể cho em biết rõ hơn nó khác nhau chỗ nào từng cái dc không? Cảm ơn anh rất nhiều

    1. http://linhdoha.wordpress.com/2009/06/30/xml-va-json/

      Hi bạn, bạn có thể xem bài viết này của Linhdoha để có một sự so sánh giữa JSON & XML.

      Về mặt ứng dụng, chỉ nên dùng JSON trong những trường hợp “nội bộ” ứng dụng. Còn với webservice (public) thì nên dùng XML. Đơn giản là vì, JSON phục vụ cho JS hoặc AS (ActionScript), còn XML là định dạng chuẩn và được sử dụng rất rộng rãi.

      Về mặt lợi ích, JSON tiết kiệm đường truyền hơn XML.

      Ngoài ra, các kỹ thuật parse string cũng ảnh hưởng tới tốc độ xử lý của ứng dụng.

  3. Mình có 1 tuts về kết hợp giữa JSON trong Ajax của Jquery và PHP,
    các bạn có thể vào đây xem: http://ntuts.com/jquery/huong-dan/ket-hop-su-dung-json-ajax-voi-jquery-va-php

    1. Web của bạn hay đấy. Có bài nào tâm đắc thì share mình đọc với nhé.

  4. […] JSON là gì ? August 2009 5 comments 3 […]

  5. Em đang tìm hiểu về activeMQ,mấy anh biết về cái này không,có thể cho 1 ví dụ về phần này ko ? kết hợp với json :d

    1. Uhm, đơn giản nhất, trước hết em phải hiểu ActiveMQ theo cách mà em hiểu về MySQL chẳng hạn.

      1. Nó là một dạng service dạng Client/Server. Truy xuất vào nó giống như truy xuất vào một database vậy. Vì vậy nếu viết mã nguồn thì logic của 2 việc này (kết nối database và kết nối queue là như nhau, chỉ khác nhau về thư viện, code).
      2. Khác với database giải quyết bài toàn lưu trữ, ở đây em giải quyết bài toán hàng đợi. Chú ý: em hoàn toàn có thể sử dụng DATABASE để làm một hàng đợi. Tất nhiên, Queue Serser có nhiều tính năng tích hợp sẵn cho bài toán hàng đợi mà làm thủ công với DATABASE sẽ vất vả hơn.
      3. Nếu em hoàn toàn chưa biết gì về hàng đợi thì em hãy học nó trước khi tìm hiểu về ActiveMQ.

      Thư viện để giao tiếp với Active MQ từ PHP là Stomp. Em có thể tìm hiểu thêm về nó. Phải tâm niệm là nó rất đơn giản, như kết nối, truy vấn database vậy thôi :). Chỉ có điều câu lệnh nó khác và mục đích nó khác.

  6. Chào các bạn. Mình cũng đang tìm hiểu về ActiveMQ và MicrosoftMQ nhưng mà chưa biết bắt đầu thế nào. Các bạn có tài liệu về nó không hoặc cho mình xin hướng tìm hiểu về. Cảm ơn các bạn nhé.

    1. Queue service là dịch vụ dữ liệu kiểu hàng đợi. Về mặt bản chất nhất, bạn có thể hiểu đó là một dạng cơ sở dữ liệu chuyên xử lý hàng đợi. Nguyên tắc thao tác với nó không hề khác với việc bạn thao tác với MySQL hay MSSQL hay bất kỳ Client/Server Service nào khác. Vì vậy bạn có thể bắt đầu như sau:

      1/ Cài đặt
      2/ Tìm kiếm thư viện tương ứng với công nghệ/ngôn ngữ lập trình bạn sử dụng (bạn dùng Java hay PHP hay .NET…)?
      3/ Kết nối
      4/ Đưa message vào hàng đợi
      5/ Đọc message ra, xóa
      6/ Các vấn đề nâng cao: Tăng hiệu năng, Tổ chức multi-server nếu bạn đang làm ứng dụng “khủng”.

      1. Vâng! Cảm ơn bạn nhé. Để mình tiến hành làm. Nếu có vấn đề nào không dõ mình hỏi bạn tiếp nhé.

      2. Chào bạn! Tối hôm qua mình có tìm hiểu rồi, nhưng chưa cài đặt được. Bạn có thể hướng dẫn mình cài đặt cái ActiveMQ với ngôn ngữ là C# không? Mình xin cảm ơn.

      3. Hehe, mình chuyên về PHP, LINUX nên e là không giúp gì cho bạn được. Bạn có thể cho biết bạn sử dụng thư viện nào để kết nối và gặp lỗi gì không?

        Trên LINUX gõ lệnh là nó cài được nên mình cũng chưa quan tâm kỹ lắm về vấn đề này.

      4. Em có làm theo bài hướng dẫn này http://rantdriven.com/post/ActiveMQ-via-C-sharp-and-dotnet-using-ApacheNMS-Part-1.aspx. Nhưng em vẫn chưa cài được nó. Với cái khó của em là em không hiểu nó dùng để làm gì nên rất chi là mung lung. Em có add nick skype của anh rồi. Anh online cho em hỏi chút được không ạ. Nick skype của em là humg.thongit. Em xin cảm ơn anh.

      5. Hi, để tối nha. Bi giờ anh đang bận.

        Em không hiểu nó dùng để làm gì ấy hả. Uhm, ví dụ thế này, em có một hê thống xử lý ảnh chẳng hạn. Yêu cầu xử lý thì cực nhiều, nhưng hệ thống lại không đủ mạnh để xử lý chừng đó một lúc. Lúc này em cần tạm trữ các yêu cầu vào đâu đó để lấy ra xử lý dần dần.

        Lúc này em sử dụng Queue để lưu trữ các yêu cầu đó. Và lấy ra xử lý dần dần.

        Về mặt bản chất, em chả cần dùng Queue Service làm gì, em dùng database là giải quyết được vấn đề rồi.

        Tuy nhiên Queue là dạng database bao gồm thiết kế lưu trữ và cách truy xuất tối ưu cho hàng đợi. Em sẽ đạt hiệu năng cao gấp nhiều lần biện pháp sử dụng database bình thường.

        Tóm lại cần phải hiểu Queue là database dùng để lưu trữ các thông điệp tạm thời để có thể xử lý sau. Nó có thiết kế tối ưu cho việc truy xuất hàng đợi thay vì sử dụng DB thông thường. Bỏ qua tất cả, hay hiểu nó là database 🙂

        À, khi em gửi SMS, thỉnh thoảng em không gửi được đúng không (vì máy nhận tắt nguồn chẳng hạn). SMS của em sẽ được lưu vào Queue để gửi về sau.

  7. Em cảm ơn anh nhé. Em mới đi làm từ đầu tuần, các anh ý giao tìm hiểu về cái ActiveMQ và cái RabbitMQ. Tối anh tư vấn giúp em về 2 cái này nhé. Tối em đợi anh online, em mà không làm được 2 cái này chắc em bị đuổi việc mất :(. Em cảm ơn anh trước nhé, em biết ơn anh nhiều lắm.
    Nick skype của em là: humg.thongit
    Yahoo: dunghoi.vianhlathe@yahoo.com

  8. Anh ơi, e đang tìm hiểu Json, a có thể viết 1 ví dụ về web service json php để kết nối CSDL MySQL được không anh?
    Tks a nhiều

    1. Về cơ bản em đã biết cách kết nối CSDL MySQL = PHP chưa?

      Nếu rồi thì khi đã query được dữ liệu vào một biến $data nào đó thì em chỉ cần dùng hàm php json_encode($data); là được.

      echo json_encode($data);

Bình luận về bài viết này