Node.js 6.10中如何从JSON提取指定值?
问题原因分析与解决方案
咱们先拆解一下问题出在哪:
首先看你拿到的body实际内容:
returned data1 "{'response' : 'Not latest version of file, update not performed'}"
这里的body本质是被双引号包裹的字符串,而且内部的结构用了单引号——但JSON的语法规范明确要求:
- 对象的键和字符串值必须使用双引号
- 单引号不能用来包裹JSON的键或值
你直接执行JSON.parse(body)时,其实是把整个带双引号的内容解析成了一个字符串变量(而非JSON对象),所以之后尝试用jsonBody["response"]取属性,自然会得到undefined——因为字符串根本没有这个属性。
修正后的代码方案
我们需要先对body做两步预处理,再进行解析:
// 1. 去掉body首尾的外层双引号 const cleanedBody = body.replace(/^"|"$/g, ''); // 2. 把内部的单引号替换成双引号,符合JSON语法规范 const validJsonStr = cleanedBody.replace(/'/g, '"'); // 3. 现在可以正常解析成JSON对象了 const jsonBody = JSON.parse(validJsonStr); const valueReturned = jsonBody.response; console.log("logs: " + valueReturned);
额外补充
如果你的body里存在带转义的单引号(比如"{'msg': 'it\'s a test'}"),直接替换所有单引号会出问题,这时候可以考虑用更严谨的正则处理,但根据你给出的场景,上面的代码已经能完美解决问题啦。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

