2017-08-31 109 views
1

一个JSON API响应我在JavaScript(和jQuery)新的,我想这样调用的API:呼叫使用jQuery

{"GOOGL":{"PRICE":950.123},"TSLA":{"PRICE":345.67}} 

我与我的代码尝试,但它不工作:

var list = ["GOOGL","TSLA"]; 


$(document).ready(function() { 
    $.getJSON('api.json', function(data) { 
     for (var i in list) { 
       console.log(data.list[i].PRICE); 
     }; 
    }); 
}); 

我得到了这样的错误:“遗漏的类型错误:无法未定义读取属性‘0’”

任何人可以帮助我吗?

+1

'data [list [i]]。PRICE'。 – nnnnnn

+0

这意味着'data.list'是未定义的,试着通过console.log(data)来检查'data'的内容是什么' – masterpreenz

+0

@nnnnnn在list var中没有价格'var list = [“GOOGL” ,“TSLA”];'OP不太清楚他有'{“GOOGL”:{“PRICE”:950.123},“TSLA”:{“PRICE”:345.67}}'但是在循环中他使用'list ' – guradio

回答

0

正如在评论中提到@nnnnnn,你可以这样做:

console.log(data[list[i]].PRICE); 

为了解释:

list[i]将在指数i(如GOOGLTSLA)返回存储在list值。

存储在data{"GOOGL":{"PRICE":950.123},"TSLA":{"PRICE":345.67}})的值似乎使用的list[i]GOOGLTSLA)的值作为密钥。

这意味着做data["GOOGL"](与data[list[i]])会让你{"PRICE":950.123}

然后再走一步data["GOOGL"].PRICE(与data[list[i]].PRICE)会让你950.123

鉴于console.log(data.list[i].PRICE);不起作用,因为它正在寻找data对象中的list属性(它不存在)。

在这种情况下,你会看到Uncaught TypeError: Cannot read property '0' of undefinedi为零,因为data.list不确定的收益(和代码试图从它那里得到财产0)。

0
for (var i in list) { 
    console.log(data[list[i]].PRICE); 
}; 

无法使用变量名使用点运算符访问对象的属性。

所以你必须使用数组符号..

0

@kevin:你不能用点运算符访问对象键,你必须通过哈希内部的关键,如“数据[名单[I] .PRICE“