我測試了一些代碼,我創建了一個帶有數據的json文件。getJSON只返回[對象對象],[對象對象]
問題是我得到了「[對象對象],[對象對象]」的警報。沒有數據。
我做錯了什麼?
下面是代碼:
,這裏是appData.json的內容
[{"foo":"bar"},{"foo2":"blablabla"}]
此外,index.html文件和JSON文件都是我的桌面和我我從那裏運行它。
我測試了一些代碼,我創建了一個帶有數據的json文件。getJSON只返回[對象對象],[對象對象]
問題是我得到了「[對象對象],[對象對象]」的警報。沒有數據。
我做錯了什麼?
下面是代碼:
,這裏是appData.json的內容
[{"foo":"bar"},{"foo2":"blablabla"}]
此外,index.html文件和JSON文件都是我的桌面和我我從那裏運行它。
請嘗試這樣的:
$.getJSON("appData.json", function(results) {
$.each(results, function(index) {
alert(results[index].foo);
});
});
那麼,你會得到一個對象數組,而數組和對象就是數據。
// 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迭代方法之一。
當警報對象,它會說這一點,[Object]
,如果使用Firefox,你總是可以做alert(results.toSource());
但更好的辦法是不是開始使用控制檯(F12):
$(document).ready(function() {
$.getJSON("appData.json",function(results){
console.log(results);
});
});
和你可以看到整個對象和結構。
是沒有問題的出現。這讓你知道數組內有兩個對象。你得到這個的原因是因爲它是頂級的,所以你只能返回類型。訪問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]);
}
}
這隻適用於簡單的json對象。如果你需要訪問一個複雜的模型,你應該使用遞歸。 – 2012-08-11 20:28:36