2009-07-21 4 views
15

Bạn có thể cho tôi biết, việc sử dụng JSON là gì (bằng Javascript và PHP). khi chúng ta cần một phương thức JSON.Ở đâu/khi nào chúng tôi sử dụng JSON?

Tôi đọc từ liên kết sau nhưng, tôi không nhận được bất kỳ thông tin nào liên quan đến việc triển khai JSON trên bất kỳ dự án nào.

http://www.json.org/js.html

+3

nên cộng đồng wiki – SilentGhost

+1

... nếu nó wasn' một lần lặp lại vài lần – annakata

Trả lời

21

JSON là một định dạng dữ liệu trao đổi trọng lượng nhẹ (nghĩ về nó như XML trên một chế độ ăn uống). Về cơ bản, bất kỳ nơi nào bạn có thể sử dụng XML để tuần tự hóa dữ liệu, bạn có thể sử dụng JSON để thay thế.

3

JSON chỉ là định dạng dữ liệu. Nếu bạn cần lưu trữ hoặc truyền tải dữ liệu không phức tạp hơn một loạt các cặp giá trị tên lồng nhau, các giá trị của nó được hỗ trợ bởi tiêu chuẩn JSON, thì JSON có thể là định dạng dữ liệu phù hợp cho dự án của bạn.

Nếu dự án của bạn có lưu trữ dữ liệu/ứng nhu cầu giao thông vận tải;)

8

Mặc dù tên của nó, một trong những ứng dụng cơ bản của định dạng JSON là trong AJAX phát triển web (mặc dù chắc chắn không phải là người duy nhất). Nó thường được ưu tiên hơn XML truyền thống cho cú pháp trọng lượng nhẹ của nó.

2

JSON là định dạng trao đổi dữ liệu có trọng lượng tương đối nhẹ (ít nhất là khi so sánh với XML hoặc HTML) và hữu ích nhất khi trao đổi một lượng nhỏ dữ liệu giữa máy khách web và máy chủ/dịch vụ web.

Tuy nhiên, nó không phải là lựa chọn tốt nhất (mặc dù tốt hơn nhiều so với XML) để trao đổi danh sách dữ liệu lớn, do phí trên mỗi hàng được trao đổi.

4

JSON là định dạng dữ liệu được sử dụng trong việc truyền dữ liệu. Nó được sử dụng chủ yếu trong các cuộc gọi Javascript AJAX.

Cấu trúc của JSON chỉ đơn giản là cặp tên: giá trị được đặt ngoặc. Do tính chất nhỏ gọn và đơn giản, nó là cấu trúc tốt hơn để truyền các tập dữ liệu tương đối nhỏ và những thứ có thể được nhóm lại thành các cặp tên: giá trị.

Ví dụ:

Một prototype.js Ajax gọi biến đổi và nhận dữ liệu JSON:

my_prototype_class = Class.create(); 
my_prototype_class.prototype = { 
    initialize: function() { 
     this.myarray = new Array(); 
     //do initialization 
    },  
    my_function: function(direction){ 
     new Ajax.Request('/my/url.php', 
      {  
       method: 'post', 
       parameters: { name: value, 
           myarray_data: this.myarray.toJSON() }, 
       onSuccess: function(transport) { 
        var response = transport.responseText.evalJSON(); 
        //handle response 
       }, 
       onFailure: function(){ 
        //handle failure 
       }  
      }); 
    } 
} 
Event.observe(window, "load", function(){new my_prototype_class();}, false); 

Và sử dụng PHP bạn muốn xử lý các yêu cầu với một cái gì đó như thế này:

function my_php_handler() 
{ 
    #parse POST data 
    $name = $_POST["name"]; 
    $myarray_data = $_POST["myarray_data"]; 

    #transform the data in some way 

    #return encoded string 
    echo json_encode($results); 
} 

Một cái gì đó như:

[{"myarray": [], "name": value}] 

sẽ được chuyển qua trong yêu cầu/phản hồi http. Dữ liệu ở định dạng này được gọi là JSON.

1

JSON chủ yếu được sử dụng như là một thay thế có thể đọc được trọng lượng nhẹ và dễ đọc hơn đối với XML trong các ứng dụng web AJAX.

2

Tôi khuyên bạn nên sử dụng JSON nếu bạn cần thao tác dữ liệu đã truy xuất (tức là thông qua cuộc gọi Ajax trong trình duyệt của bạn) với mã JavaScript. Trong trường hợp này JSON rất thoải mái vì bạn có thể trực tiếp tải nó vào JavaScript của bạn và sử dụng nó (do đó Java Script Object Notation => JSON). Điều này được gọi là deserialization của một chuỗi JSON trong các đối tượng JavaScript. Nó có thể được thực hiện bằng cách sử dụng eval(), tuy nhiên - tôi đọc - đặt ra một số vấn đề bảo mật, do đó một số serialization JSON (de) nên được sử dụng.

Như đã trình bày trên page bạn nói bạn có một số chuỗi JSON như

{"bindings": [ 
     {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}, 
     {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"}, 
     {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"} 
    ] 
} 

được gửi qua mạng, được khởi xướng bởi một số Ajax cuộc gọi trên máy khách mà sau đó một callback được gọi tương tự (ví dụ trong .Net)

function onSuccess(result){ 
    var myObj = Sys.Serialization.JavaScriptSerializer.deserialize(result, false); 
    myObj.bindings[0].ircEvent... 
} 

Lợi thế chỉ đơn giản là dễ dàng (de) tuần tự hóa khi sử dụng JavaScript, chủ yếu là phát triển web với Ajax. Nếu không, tôi không thực sự sử dụng JSON mà là dựa vào XML vì các ứng dụng dành cho máy tính để bàn có các thư viện phân tích cú pháp thực sự mạnh mẽ.

2

Tất cả các câu trả lời khác đều tuyệt vời, nhưng có lẽ giải thích đơn giản nhất cho trường hợp cụ thể của bạn (JavaScript + PHP): JSON là cách dễ nhất để dịch đối tượng JavaScript thành mảng hoặc đối tượng PHP (và ngược lại)).

Hãy xem json_encode()json_decode() cho phía PHP của sự vật. Về phía JavaScript, một eval đơn giản() là cách dễ nhất (nhưng ít an toàn nhất) để lấy một đối tượng ra khỏi chuỗi JSON, nhưng thư viện bạn chọn chắc chắn sẽ có các chức năng để xử lý điều này cho bạn, và nếu bạn đang nhắm mục tiêu các trình duyệt mới hơn, bạn có thể sử dụng ECMAScript 5 JSON object.

3

JSON là định dạng tuyệt vời để chuyển dữ liệu qua lại giữa Javascript và PHP. Việc sử dụng phổ biến nhất của tôi là dành cho các thông báo trạng thái.

Dưới đây là một số Javascript để thực hiện truy vấn Ajax cho một tập lệnh PHP nhỏ.

new Ajax.Request('dostuff.php', { 
     method: 'get', 
     parameters: {'param1': 'this is param 1'}, 
     onSuccess: function(response, jsonHeader){ 
      if(jsonHeader['status'] == 'Success'){ 
      //Everything is OK, do stuff 
      }else{ 
      alert(jsonHeader['status']); 
      } 
     }, 
     onFailure: function(){ 
      alert('Fail!'); 
     } 
    }); 

Sau đó, ở phía bên PHP, bạn có thể có một cái gì đó như thế này:

$jsonHeader = array(); 

    if($_REQUEST['param1']) 
    { 
     echo '<p>You passed ' . $_REQUEST['param1'] . '</p>'; 
     $jsonHeader['status'] = 'Success'; 
    }else 
    { 
     $jsonHeader['status'] = 'Failed because the request was invalid'; 
    } 

    if(is_array($jsonHeader) and sizeof($jsonHeader) > 0) 
    { 
     header('X-JSON: (' . json_encode($jsonHeader) . ')'); 
    } 

Điều gọn gàng là Prototype tự động giải mã header X-JSON PHP được tạo ra.

Kết quả cuối cùng là lập luận jsonHeader của phương pháp onSuccess trong Javascript được tự động chuyển đổi thành một mảng đó là dữ liệu giống như các mảng $ jsonHeader trong PHP