You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:04:19