我正在使用NASA近地对象数组进行学生项目,并且无法访问具有键的日期和连字符的嵌套对象,例如
2016-09-08 : [...]
我得到的错误只是'未定义'。
我的API调用是:
$(document).ready(function NASAtest() {
$.ajax({
type: "GET",
url: "https://api.nasa.gov/neo/rest/v1/feed?start_date=2016-09-07&end_date=2016-09-08&api_key=DEMO_KEY",
asynch: false,
contentType: "application/javascript",
dataType: "json",
success: function(data) {
console.log(data)
var recordList = data.near_earth_objects;
console.log(recordList);
var recordList2 = data.near_earth_objects[2016-09-08];
console.log(recordList2);
}
});
});
示例API数据:
{
"near_earth_objects": {
"2016-09-08": [
{
"neo_reference_id": "3726710",
"name": "(2015 RC)",
"nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=3726710",
"absolute_magnitude_h": 24.3,
"is_potentially_hazardous_asteroid": false,
} ] } }
请参阅小提琴:https://jsfiddle.net/lollyborch/v640ocfr/
和JSON数据:https://api.nasa.gov/neo/rest/v1/feed?start_date=2016-09-07&end_date=2016-09-08&api_key=DEMO_KEY
我最终希望迭代所有日期信息,以获取日期范围内的“absolute_magnitude_h”和“is_potentially_hazardous_asteroid”等密钥,但在此阶段我只是遇到了越过日期密钥的问题。
我尝试使用方括号而不是点描述,如here和here所述,但似乎看不出我做错了什么。
非常感谢任何有关正确方向的想法。
答案 0 :(得分:3)
属性名称为2015-09-08
,但是,您正在访问密钥1998
(2015 - 9 - 8)。您需要将其包装在引号中,否则它将评估表达式并将其结果用作属性名称:
data.near_earth_objects["2015-09-08"]
作为旁注,由于您在问题中提到了点符号,因此在一种情况下您必须使用括号表示法而不是点符号,因为等效的属性名称不能用点符号表示。
话虽如此,当你沿着这条路走下去时,你可能最终会迭代对象的内容,而不是使用硬编码的名字,此时问题会自行解决:
for (var neo in data.near_earth_objects) {
//neo is now, for instance, "2016-09-07"
console.log(neo, data.near_earth_objects[neo])
}
答案 1 :(得分:0)
使用括号中的表示法时,您可能需要考虑在试图访问的密钥周围使用引号:
var recordList2 = data.near_earth_objects['2016-09-08'];
您可以在下面的控制台中see an example of this being accessed: