2009-07-21 216 views

回答

21

JSON是一種重量輕的數據交換格式(把它看作節食XML)。基本上任何可以使用XML來序列化數據的地方都可以使用JSON。

3

JSON只是一種數據格式。如果您需要存儲或傳輸不比嵌套的名稱/值對系列更復雜的數據,而JSON標準支持其值,那麼JSON可能是您的項目的正確數據格式。

如果你的項目有數據存儲/傳輸需求;)

8

儘管它的名字,JSON格式的主要用途之一是在AJAX Web開發(但肯定不是唯一的一個)。它的輕量級語法通常比傳統的XML更受歡迎。

2

JSON是相對輕質的數據交換格式(當相比XML或HTML至少)和交換少量web客戶端和web服務器/服務之間的數據時是最有用的。

然而,這是不是最好的選擇(雖然比XML更好)用於交換數據的大名單,由於每行的開銷交換。

4

JSON是在數據的傳輸中使用的數據格式。它主要用於Javascript AJAX調用。

JSON的結構簡單的括號名稱:值對。由於它的緊湊性和簡單性,對於傳輸相對較小的數據集和可以分組爲名稱:值對的東西來說,它是一個更好的結構。

例如:

prototype.js是一個Ajax調用轉換和接收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); 

而且使用PHP你處理的是這樣的要求:

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); 
} 

喜歡的東西:

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

將在http請求/響應中傳遞。這個格式的數據被稱爲JSON。

1

JSON主要用作AJAX網絡應用程序中輕量且更人性化的XML替代品。

2

如果您需要使用JavaScript代碼處理檢索到的數據(即通過瀏覽器中的Ajax調用),我會建議使用JSON。在這種情況下,JSON非常舒適,因爲您可以直接將其加載到JavaScript中並使用它(因此Java Script Object Notation => JSON)。這稱爲JavaScript對象中的JSON字符串的反序列化。這可以通過使用eval()來完成,但是 - 我讀 - 帶來了一些安全問題,因此應該使用一些JSON(de)序列化器。

正如你提到你有一些JSON字符串如

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

這是通過網絡發送,通過一些Ajax調用的地方再調用回調函數,如客戶端發起的page描述(即.Net)

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

當使用JavaScript時,優勢就是簡單(de)序列化,主要是使用Ajax進行web開發。否則,我不會真的使用JSON,而是依賴於XML,因爲對於桌面應用程序來說,真的有強大的解析庫。

2

所有其他答案都很好,但對您的特定情況(JavaScript + PHP)可能是最簡單的解釋:JSON是將JavaScript對象轉換爲PHP關聯數組或對象的最簡單方法(反之亦然)

看看json_encode()json_decode()爲PHP方面的東西。在JavaScript方面,簡單的eval()是從JSON字符串中獲取對象的最簡單(但最不安全!)的方式,但您選擇的庫肯定會有功能爲您處理此問題,並且如果你的目標是新的瀏覽器,你可以使用ECMAScript 5 JSON object

3

JSON是一種用於在Javascript和PHP之間傳遞數據的優秀格式。我最常用的用途是狀態消息。

下面是一些用於對小PHP腳本進行Ajax查詢的Javascript。

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!'); 
     } 
    }); 

然後,在PHP端,你可以有這樣的事情:

$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) . ')'); 
    } 

整潔的事情是,原型自動解碼的X-JSON頭PHP是創造。

最終的結果是,在Javascript中的onSuccess方法的jsonHeader參數自動轉換成一個數組,是相同的數據在PHP中的$ jsonHeader陣列