2012-08-11 128 views
2

我測試了一些代碼,我創建了一個帶有數據的json文件。getJSON只返回[對象對象],[對象對象]

問題是我得到了「[對象對象],[對象對象]」的警報。沒有數據。

我做錯了什麼?

下面是代碼:

​​

,這裏是appData.json的內容

[{"foo":"bar"},{"foo2":"blablabla"}] 

此外,index.html文件和JSON文件都是我的桌面和我我從那裏運行它。

回答

5

請嘗試這樣的:

$.getJSON("appData.json", function(results) { 
     $.each(results, function(index) { 
      alert(results[index].foo); 
     }); 
    }); 
+1

這隻適用於簡單的json對象。如果你需要訪問一個複雜的模型,你應該使用遞歸。 – 2012-08-11 20:28:36

1

那麼,你會得到一個對象數組,而數組和對象就是數據。

//   v----first Object in the outer Array 
alert(results[0].foo); 
    //    ^----foo property of the first Object 

這只是一個alert顯示默認的對象的toString()值。

當您使用$.getJSON時,jQuery會自動將JSON文本解析爲JavaScript對象。如果您想要原始JSON,請改爲請求$.get


如果你想要遍歷數組,使用for循環,或從jQuery的或本機API迭代方法之一。

1

當警報對象,它會說這一點,[Object],如果使用Firefox,你總是可以做alert(results.toSource());但更好的辦法是不是開始使用控制檯(F12):

$(document).ready(function() { 
    $.getJSON("appData.json",function(results){ 
     console.log(results); 
    }); 
}); 

和你可以看到整個對象和結構。

1

是沒有問題的出現。這讓你知道數組內有兩個對象。你得到這個的原因是因爲它是頂級的,所以你只能返回類型。訪問JSON數據的一個好方法是通過遞歸。

function ContainsKeyValue(obj, key, value){ 
for(all in obj) 
{ 
    if(obj[all] != null && obj[all][key] == value){ 
     return true; 
    } 
    if(typeof obj[all] == "object" && obj[all]!= null){ 
     var found = ContainsKeyValue(obj[all], key, value); 
     if(found == true) return true; 
    } 
} 
return false; 
} 

這將從圖中的給定對象開始,並對找到的所有對象進行遞歸。我這樣使用它:

var liveData = []; 
for(var item in json.Items) 
{ 
if(ContainsKeyValue(json.Items[item], "Key", "Value") === true) 
{ 
    liveData.push(json.Items[item]); 
} 
}