使用数字和连字符访问Javascript Object键

时间:2016-04-11 13:43:46

标签: javascript json ajax api

我正在使用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”等密钥,但在此阶段我只是遇到了越过日期密钥的问题。

我尝试使用方括号而不是点描述,如herehere所述,但似乎看不出我做错了什么。

非常感谢任何有关正确方向的想法。

2 个答案:

答案 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

enter image description here