将 LinkedIn API 响应正文解析为 JSON

Parse LinkedIn API response body to JSON

这让我抓狂,我希望有人遇到过这个问题并提出一个干净、优雅的解决方案。当向 LinkedIn REST Api 发出 JSON 请求时,正文作为带有换行符的字符串返回。当我使用 JSON.parse 将字符串解析为 JSON 时,它 出现 以创建一个 JSON 对象,但我无法使用点表示法访问这些值使用他们的相对键。我试过转义新行字符,JSON.stringify 的组合然后解析等。我无法让它工作而且它很令人讨厌,尽管我确信我忽略了一个简单的解决方案。这是 LinkedIn API 的回复:

{"statusCode":200,"body":"{\n \"numConnections\": 152,\n \"numConnectionsCapped\": false\n}","headers":{"server":"Apache-Coyote/1.1","x-li-request-id":"myid","vary":"*","x-li-format":"json","content-type":"application/json;charset=UTF-8","date":"Tue, 10 Jan 2017 00:08:01 GMT","x-li-fabric":"prod-ltx1","transfer-encoding":"chunked","x-li-pop":"prod-ltx1","set-cookie":["lidc=\"b=TB70:g=489:u=129:i=1484006881:t=1484082637:s=AQG3LuLPqWuZiIoHGf2NqD8O7mRfdA4q\"; Expires=Tue, 10 Jan 2017 21:10:37 GMT; domain=.linkedin.com; Path=/"],"x-li-uuid":"53NCd2VAmBSAAWKrrSoAAA=="},"request":{"uri":{"protocol":"https:","slashes":true,"auth":null,"host":"api.linkedin.com","port":443,"hostname":"api.linkedin.com","hash":null,"search":"?format=json","query":"format=json","pathname":"/v1/people/id=myid:(num-connections,num-connections-capped)","path":"/v1/people/id=myid:(num-connections,num-connections-capped)?format=json","href":"https://api.linkedin.com/v1/people/id=myid:(num-connections,num-connections-capped)?format=json"},"method":"GET","headers":{"authorization":"Bearer mytoken"}}}

我正在尝试使用键 "numConnections" 访问该值,但就是无法访问该值。

使用 JSON.parse(response.body) 得到这个结果:

{"numConnections":152,"numConnectionsCapped":false}

但是我仍然无法使用

访问与每个键关联的值

myObj.numConnections 或我尝试过的任何其他符号。如何在 NodeJS 中从中获取有效的 JSON 对象?

解析 response.body 的结果是一个对象 - 您可以在其上使用点表示法或括号表示法来访问值:

var parsedBody = JSON.parse(response.body);
parsedBody.numConnections //152
parsedBody['numConnections'] //152

尝试

JSON.parse(JSON.stringify(response.body))

嗯,这很愚蠢。我发现我的问题实际上是 Express 不允许使用 res.send(num) 发送数值。由于某种原因,结果控制台中没有错误,我在 get 请求中收到了一个未定义的值。解析 JSON 不是问题,但将答案标记为有效。如果其他人遇到此问题,如果您想在 Express 中将它们作为响应发送,则需要在将它们与对象分开时对数值进行字符串化!