访问js对象的属性

时间:2014-09-25 13:18:31

标签: javascript node.js

我正在使用node-rest-client从api获取数据。这一切顺利,直到我得到数据(一个js对象),然后我无法访问响应的属性:

console.log("dataObject:", dataObject);
console.log("dataObject.access_token:", dataObject.access_token);
console.log("dataObject['access_token']:", dataObject['access_token']);

将其打印到日志中:

15:12:39 worker.1  | dataObject: {"access_token":"uzJB9nG1ZbpsJaFy","token_type":"bearer"}
15:12:39 worker.1  | dataObject.access_token: undefined
15:12:39 worker.1  | dataObject['access_token']: undefined

我不明白这是怎么回事!

2 个答案:

答案 0 :(得分:1)

  

一切顺利,直到我得到数据(一个js对象)

那是你出错的地方。它不是一个javascript对象,它是一个JSON字符串。赠品就在这里:

15:12:39 worker.1  | dataObject: {"access_token":"uzJB9nG1ZbpsJaFy","token_type":"bearer"}

当您登录到控制台时,大多数(可能全部?)Javascript引擎都不会将"放在属性名称周围(它们是可选的)。但是作为字符串的JSON字符串具有它们。

所以你应该能够做到:

dataObject = JSON.parse(dataObject);

然后:

console.log(dataObject.access_token);

您没有首先显示您实际获得JSON的方式,但许多库(例如jQuery)将自动为您parse

答案 1 :(得分:0)

您从其他客户端获取的数据似乎是字符串。您可以快速尝试以下操作,看看它是否有效。

dataObject = JSON.parse(dataObject);

如果它是一个对象,那么就行了

console.log("dataObject.access_token:", dataObject.access_token);

会打印

15:12:39 worker.1  | dataObject: [object Object]

但是,我建议,找出它为什么会以字符串形式出现?检查您是否正在从API正确发送Content-Type: application/json; charset=utf-8标题。

修改

默认情况下看起来node-rest-client需要application/json;charset=utf-8(分号后没有空格)。您可以像这样从API发送标头,也可以修改node-rest-client中的选项here