2017-01-10 105 views
0

这使我疯狂,我希望有人遇到这个问题,想出一个干净,优雅的解决方案。当向LinkedIn REST Api发出JSON请求时,主体会以带有换行符的字符串形式返回。当我使用JSON解析字符串到JSON时,它出现来创建一个JSON对象,但我不能用点符号使用它们的相对键来访问这些值。我试图转义新的行字符,JSON.stringify然后解析等组合。我不能得到这个工作,它是讨厌的,虽然我敢肯定有一个简单的解决方案,我忽略。下面是来自LinkedIn的API响应:解析LinkedIn API响应正文JSON

{ “的StatusCode”:200, “体”: “{\ n \” numConnections \ “:152 \ n \” numConnectionsCapped \“: 假\ n }”, “标题”:{ “服务器”: “Apache的狼/ 1.1”, “X丽请求-ID”: “本身份识别码”, “改变”: “*”, “×丽格式”: “json”,“content-type”:“application/json; charset = UTF-8”,“date”:“星期二, 2017年1月10日00:08:01 GMT”,“x-li-fabric”: “PROD-ltx1”, “传输编码”: “分块”, “X丽弹出”: “PROD-ltx1”, “设定的cookie”:[ “LIDC = \” b = TB70:G = 489: ; Expires = Tue,2017年1月10日21:10:37 GMT; domain = .linkedin.com; Path = /“],”x = 129:i = 1484006881:t = 1484082637:s = AQG3LuLPqWuZiIoHGf2NqD8O7mRfdA4q \锂UUID “:” 53NCd2VAmBSAAWKrrSoAAA == “},” 请求 “:{” URI “:{” 协议 “:” https: “开头, ”斜线“:真 ”AUTH“:空, ”宿主“: ”api.linkedin.com“, ”端口“:443, ”主机名“:” api.linkedin .COM “ ”散“:空, ”搜索“: ”格式= JSON“, ”查询“: ”格式= JSON“, ”路径“:”/ V1 /人/ ID =身份识别码:(NUM的连接, “方法”:“/ 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”}, “:” GET”, “头”:{ “授权”: “承载 即为MyToken”}}}

我试图用密钥来访问值 “numConnections” 但就是无法获取到值。

使用JSON.parse(response.body)让我这样的结果:

{ “numConnections”:152, “numConnectionsCapped”:假}

但我仍然无法访问使用

每个键关联的值

myObj.numConnections或我试过的任何其他表示法。如何在NodeJS中获取有效的JSON对象?

回答

1

解析response.body的结果是一个对象 - 在你可以使用点符号或括号符号访问值:

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

为了做到这一点,您应该可以很容易地验证使用Chrome控制台 - 我可以毫无问题地使用'let y = JSON.parse(response.body)'。 –

0

尝试

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

'response.body'已被字符串化 – hackerrdave

0

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