我正在使用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
我不明白这是怎么回事!
答案 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