【问题标题】:Accessing Javascript Object key with numbers and hyphens使用数字和连字符访问 Javascript 对象键
【发布时间】:2016-04-11 13:43:45
【问题描述】:

我在一个学生项目中使用 NASA Near Earth Object 数组,但无法访问具有日期和连字符作为键的嵌套对象,例如

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 所述,但似乎看不出我做错了什么。

任何关于正确方向的想法将不胜感激。

【问题讨论】:

  • 您是否尝试使用引号:data.near_earth_objects["2015-09-08"]
  • 另外,请注意您正在检索 2016 的数据,但您尝试获取 2015 日期的数据,所以我猜你想要data.near_earth_objects["2016-09-08"]。以防万一你还在纠结“未定义”错误。见jsfiddle.net/v640ocfr/1
  • 非常感谢@Paul。踢自己,这是一个拼写错误。今晚我尝试了很多变化,我不记得更新了。

标签: javascript json ajax api


【解决方案1】:

属性名称是 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])
}

【讨论】:

  • 谢谢。添加引号和修复错字(2016 年 vs 2015 年)的组合奏效了。你是对的 - 我应该进入 for 循环的下一步,它可以解决这两个问题。
【解决方案2】:

使用方括号表示法时,您可能需要考虑在尝试访问的键周围使用引号:

var recordList2 = data.near_earth_objects['2016-09-08'];

您可以在下面的控制台中see an example of this being accessed

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2012-12-22
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    相关资源
    最近更新 更多