JavaScript解析含特殊字符的JSON响应遇嵌套引号问题求助
解决JSON字符串转义引号解析错误的方法
优先尝试两次JSON.parse:服务端返回的字符串大概率是被双重转义的JSON(即把合法JSON字符串再次转义后返回)。通过两次解析可以自动处理转义逻辑,避免手动替换的错误:
// 假设原始响应字符串为 responseStr try { const jsonStr = JSON.parse(responseStr); const finalData = JSON.parse(jsonStr); console.log(finalData); // 得到正确解析的对象 } catch (err) { console.error("解析失败:", err); }这个方法能自动区分结构引号和值内部的转义引号,不会破坏值里的合法引号。
如果两次解析无效,用精准正则替换:只替换JSON结构中的转义引号(键/值的包裹引号),保留值内部的转义引号。正则会匹配紧跟在
{、:、,之后,或者紧跟在,、}之前的\",替换为":responseStr = responseStr.replace(/(?<=[:{,])\\"|\\(?=["}])/g, '"'); const finalData = JSON.parse(responseStr);注意:正则处理JSON存在边界情况风险,仅在两次解析无效时使用。
针对你提到的原始响应\"attr1\":\"my name is \"Pippo\"\":
- 两次解析后会得到
{ attr1: "my name is \"Pippo\"" },值里的引号被正确保留。 - 用正则替换后得到合法JSON字符串
"attr1":"my name is \"Pippo\"",解析后同样得到正确对象。
内容的提问来源于stack exchange,提问作者Gabrielek
相关产品推荐
相关产品推荐

