2010-12-18 78 views
4

我想解析一個簡單的JSON文件。我對JavaScript,JSON和jquery很新。我想提取JSON文件中的信息,以便稍後使用protovis將其繪製出來。我的JSON格式良好,並在JSON lint中驗證。使用jquery解析JSON

我試圖通過解析JSON對象的responseText的,這樣來實現:

var json = $.getJSON("week_13.json").responseText; 
var week13 = $.parseJSON(json); 

,希望week13是我可以訪問。請注意,我不想在$.getJSON調用中使用回調函數,因爲我只想簡單地訪問這些變量,以便稍後繪製它們。

我正在使用Chrome及其控制檯來嘗試弄清楚發生了什麼。在這段代碼中,變量json似乎是一個空字符串。不過,如果我寫在JavaScript控制檯在Chrome:

var json = $.getJSON("week_13.json"); 

jsonXMLHttpRequest對象和它的屬性responseText是包含我的JSON一個大的字符串。

var text = json.responseText; 

是一個很好的字符串,然後,如果我打電話jQuery的解析器

var data = $.parseJSON(text); 

然後data現在是我想要的東西。但是,如果我複製和粘貼我原來的兩行到控制檯我有沒有運氣,如果我使用的擴展版本在一株我原來的網頁中的jsontextdata變量它不工作:

var json = $.getJSON("week_13.json"); 
var text = json.responseText; 
var data = $.parseJSON(json); 

在這種情況下,text是一個空字符串。

我完全困惑。如果有人能讓我知道我做錯了什麼,並指出如何做到這一點,我會非常高興!請讓我知道,如果有任何其他信息,我需要回答這個問題!

+0

可以使用螢火蟲,看數據是如何回來,使用Firebug淨面板,有時你必須做的json [0]或等.... – kobe 2010-12-18 05:57:42

回答

8

$.getJSON()是異步的。您需要提供回調函數來處理結果。有關回調函數的示例,請參閱API doc

如果你真的需要你的電話是同步的(它會在您等待的結果框的瀏覽器),那麼你可以這樣做,而不是:

var url = "week_13.json" 
var data = jQuery.parseJSON(
     jQuery.ajax({ 
      url: url, 
      async: false, 
      dataType: 'json' 
     }).responseText 
    ); 
+1

輝煌!所以我的頁面無法工作的原因是因爲ajax調用沒有完成,所以當調用解析器時,json對象是空的。而如果我在控制檯中執行此操作,則在我輸入下一行時,ajax調用已完成。非常感謝!確切地說, – 2010-12-18 12:50:51

+0

。很高興我可以幫助你。不要忘記打我的答案旁邊的複選標記:-) – 2010-12-19 14:39:32

+0

+1爲parseJSON – 2011-06-14 20:56:24

0

在$ .getJSON你不需要在使用完整參數時調用parseJSON。我使用它:

$.getJSON('myjson.json', null, function (json_object) { 
     // here it is already a json_object 
     alert(json_object.text); 
    }); 

$ .getJSON已經將responseText解析爲JSON對象。

+0

但我怎樣才能得到變量json_object「退出」的回調函數?目前它似乎陷入了回調函數的範圍,我不知道如何在我的程序中的其他地方使用JSON對象中的數據(我試圖繪製它)。 – 2010-12-18 12:52:31

0

$.getJSON函數默認情況下調用所有調用asynchronously,因此此函數不返回任何內容。雖然這個函數有一個參數callback,並將數據返回給回調函數。看下面的例子。

同步程序流的其他問題可以通過在撥打getJSON前停止所有功能來解決,然後在回調中接收數據時重新開始工作。

您也可以使用全局變量來保存json並在程序中的任何位置使用。

var json = null; // the global variable to store json returned from file 

// stop all your work here. 
// I mean do not perform any more actions here. 

// make an ajax call to get the json data 
$.getJSON('week_13.json', function (jsonData) { 

    // assign the data to global json variable. 
    json = jsonData; 


    // now call your other function to manipulate json 
    // now resume your work here, 
    // and perform other actions which are dependent on json. 

});