Node.js 6.10中提取API返回嵌套JSON字段的问题
解决嵌套转义JSON字符串的解析问题
你碰到的核心问题是返回的JSON被双重转义了——C#那边的手动字符串拼接+二次序列化,导致Node.js端拿到的是一个嵌套的JSON字符串,只做一次JSON.parse自然拿不到想要的字段。下面是具体的解决方案:
步骤1:理解转义层级
先看你拿到的实际返回内容:
""{\"response\" : \" Not latest version of file, update not performed \" , \"isNewActiveDirectoryUser\" : \" False \"}""
这个字符串的结构是:
- 最外层是一个被引号包裹的字符串(Node.js接收到的原始body)
- 字符串内部是另一个经过转义的完整JSON字符串
所以第一次JSON.parse只会把外层的字符串解析成内部的那个转义JSON,还需要再解析一次才能得到可操作的对象。
步骤2:两次解析提取字段
直接上可运行的Node.js代码:
// 假设body是你从API拿到的原始返回内容 const parsedOnce = JSON.parse(body); const jsonBody = JSON.parse(parsedOnce); // 提取字段(注意原字符串前后有空格,用trim()清理更规范) const responseMessage = jsonBody.response.trim(); const isNewADUser = jsonBody.isNewActiveDirectoryUser.trim() === "True"; // 转成布尔值 // 测试输出 console.log("Response:", responseMessage); console.log("Is new AD user:", isNewADUser);
运行这段代码后,responseMessage会得到Not latest version of file, update not performed,isNewADUser会得到布尔值false,完全符合你的需求。
额外优化:从根源避免问题
如果有权限修改C#端的代码,建议不要手动拼接JSON字符串(这种方式很容易出错,还会导致转义问题),直接让C#返回一个对象,依赖框架自动序列化:
// 替换原来的手动拼接逻辑 return new { response = responseMsg, isNewActiveDirectoryUser = isNewActiveDUser.ToString() };
这样C#会直接返回标准的JSON格式,Node.js端只需要一次JSON.parse(body)就能拿到目标对象,从根源上避免嵌套转义的麻烦。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

