Javascript 访问js对象的属性

Javascript 访问js对象的属性,javascript,node.js,Javascript,Node.js,我正在使用节点rest客户端从api获取数据。一切进展顺利,直到我得到数据(js对象),然后我就无法访问响应的属性: console.log("dataObject:", dataObject); console.log("dataObject.access_token:", dataObject.access_token); console.log("dataObject['access_token']:", dataObject['access_token']); 将其打印到日志: 15:

我正在使用节点rest客户端从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

我不明白这怎么可能

您从rest客户端获得的数据似乎是字符串。您可以快速尝试以下方法,看看是否有效

dataObject = JSON.parse(dataObject);
如果它是一个物体,那么线

console.log("dataObject.access_token:", dataObject.access_token);
将打印

15:12:39 worker.1  | dataObject: [object Object]
然而,我建议,找出为什么它会以字符串的形式出现?检查您是否正在发送
内容类型:application/json;charset=utf-8
正确地从API中读取标题

编辑:

默认情况下,看起来像是节点rest客户端需要
应用程序/json;字符集=utf-8
(分号后无空格)。您可以像这样从API发送头,也可以按照说明修改
节点rest客户端中的选项

在我得到数据之前一切都很顺利(一个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

添加
console.log(typeof dataObject)
我猜,
JSON.parse
如果不是
JSON.parse()
,请尝试
dataObject.get('access\u token'))
,我看到一些API回答是这样的(例如,在无模式模式下的mongoose),JSON是一个字符串。这就是为什么它“以字符串的形式出现”“.API在这种情况下是绝对正确的。API需要发送
内容类型
头,以便rest客户端根据默认情况将其解析为JSON,具体取决于客户端
jQuery
将为您解析,但我认为本地
XMLHttpRequest
不会。我知道这一点。但是OP询问了
节点rest客户端
。看起来您没有使用它。我正在传递以下标题:标题:{“内容类型”:“应用程序/json”,“字符集”:“utf-8”}