【问题标题】:JSON Object Access NodeJS TypeErrorJSON对象访问NodeJS TypeError
【发布时间】:2017-05-06 01:05:12
【问题描述】:

JSON.Parse之后得到如下对象

undefined

{
  "request": {
    "command": "series",
    "series_id": "PET.RWTC.D"
  },
  "series": [
    {
      "series_id": "PET.RWTC.D",
      "name": "Cushing, OK WTI Spot Price FOB, Daily",
      "units": "Dollars per Barrel",
      "f": "D",
      "unitsshort": "$/bbl",
      "description": "Cushing, OK WTI Spot Price FOB",
      "copyright": "Thomson-Reuters",
      "source": "Thomson-Reuters",
      "iso3166": "USA-OK",
      "geography": "USA-OK",
      "start": "19860102",
      "end": "20161212",
      "updated": "2016-12-14T13:31:06-0500",
      "data": [
        [
          "20161212",
          52.74
        ]
      ]
    }
  ]
}

我正在尝试使用data.series[0].data[0][1] 访问“52.74”部分,但出现以下错误

TypeError: 无法读取未定义的属性“0”

我错过了什么吗?

更新 - 我正在使用的代码 (NodeJS 4.3)

var endpoint = buildEIAURL(event.request.intent.slots.OnDate.value,         event.request.intent.slots.OnDate.value)
        https.get(endpoint, (response) => {
          response.on('data', (chunk) => { body += chunk })
          response.on('end', () => {
            var stringify = JSON.stringify(body)
            var data = JSON.parse(stringify)
            console.log(data.series[0])
            var reqDate = String(new Date(event.request.intent.slots.OnDate.value))
            context.succeed(
              generateResponse(
                buildSpeechletResponse(`The price of oil on ${reqDate} is  $${data.series[0].data[0][1]}`, true),
                {}
              )
            )
          })
        })

【问题讨论】:

  • 您能告诉我们您用来执行此操作的代码吗?访问它对我来说很好:jsfiddle.net/qdcpcd17
  • console.log(body) ?
  • 我刚刚注意到的一件事。所以我在做 JSON.Parse 之后立即做了一个 console.log 并且对象开始未定义{然后我粘贴的任何内容} ...这是问题吗?
  • 是的,这就是 JSON.Parse 返回 undefined 的原因。
  • 有什么原因吗? json 似乎是有效的

标签: javascript json node.js


【解决方案1】:

适用于我的盒子。请注意,由于多行语法,您需要现代浏览器(或节点)才能运行此代码:

var data = JSON.parse(`{
  "request": {
    "command": "series",
    "series_id": "PET.RWTC.D"
  },
  "series": [
    {
      "series_id": "PET.RWTC.D",
      "name": "Cushing, OK WTI Spot Price FOB, Daily",
      "units": "Dollars per Barrel",
      "f": "D",
      "unitsshort": "$/bbl",
      "description": "Cushing, OK WTI Spot Price FOB",
      "copyright": "Thomson-Reuters",
      "source": "Thomson-Reuters",
      "iso3166": "USA-OK",
      "geography": "USA-OK",
      "start": "19860102",
      "end": "20161212",
      "updated": "2016-12-14T13:31:06-0500",
      "data": [
        [
          "20161212",
          52.74
        ]
      ]
    }
  ]
}`);
console.log(data.series[0].data[0][1])

【讨论】:

  • 问题似乎是 AWS 上的 JSON.Parse 版本至少需要将 52.74 放在引号中才能正常工作,这就是我收到未定义错误的原因
  • 这将是非常不寻常的,因为 JSON 自引入以来一直相当稳定。您可以尝试通过 AWS 上的节点运行代码 sn-p 看看会发生什么。
  • 它给了我同样的错误。我让它运行的方式是在 "52.74" 周围添加引号。根据其他一些stackoverflow答案,键值对需要双引号。添加修复它......我讨厌正则表达式这个
  • 如果值是数字、数组、对象、true、false 或 null,则需要在键周围使用双引号,而不是值。请参阅json.orgthis answer
  • 那太奇怪了,为什么 json parse 在 aws 上会这样?
猜你喜欢
  • 2017-09-02
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 2017-10-15
  • 1970-01-01
相关资源
最近更新 更多