NodeJS调用Coindesk接口用下标访问bpi属性报错如何解决?
问题核心原因
你混淆了 JavaScript 中普通对象和数组的访问规则:
- 数组是用方括号
[]包裹的有序集合,只能通过数字下标(从0开始)访问元素 - 普通对象是用大括号
{}包裹的键值对集合,只能通过属性名(字符串类型)访问属性
你返回的JSON结构里,bpi 字段是大括号包裹的普通对象,它的属性名是 USD、GBP、EUR 三个字符串,不存在数字为0的属性,所以priceData.bpi[0]返回的是undefined,尝试读取undefined的description属性就会抛出你遇到的类型错误。
解决方案
方案1:直接通过属性名访问(推荐,性能最高)
就是你最开始的正确写法,两种写法等价:
// 点语法访问 console.log(priceData.bpi.USD.description); // 方括号语法访问,属性名以字符串形式传入 console.log(priceData.bpi['USD'].description);
方案2:转数组后按下标访问(适合不想写死属性名的场景)
如果确实需要按顺序获取第一个币种的信息,可以先把bpi对象的所有值转为数组,再用下标访问:
response.on("data", function(data){ const priceData = JSON.parse(data); // 把bpi的所有属性值转为数组,顺序和接口返回的属性顺序一致 const bpiArr = Object.values(priceData.bpi); console.log(bpiArr[0].description); })
内容的提问来源于stack exchange,提问作者nc14
相关产品推荐
相关产品推荐

