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

JSON.parse无法识别字符串中转义引号,该如何排查修复?

JSON转义引号导致JSON.parse报错的问题解决思路

问题场景

你碰到的这个问题挺典型的:在C#后端用System.Web.Script.Serialization.JavaScriptSerializer序列化包含带转义引号的对象时,比如你设置的data字段值是"bla means: \"lala\"",序列化后传到前端,浏览器里调试发现转义符丢了,变成了"bla means: "lala"",直接导致JSON.parse抛出语法错误。你知道JSON标准是支持\"转义的,现在纠结该在服务端还是客户端处理这个问题。

问题根源

核心问题出在你用的JavaScriptSerializer库上——它本质是用来生成JavaScript对象字面量的,而不是严格符合JSON标准的字符串。当它处理带引号的字符串时,只会做一层转义(把"变成\"),但如果这个序列化后的内容要被前端用JSON.parse解析,就需要两层转义:因为JavaScript字符串里的反斜杠本身也需要被转义,最终JSON里的转义引号应该呈现为\\"(对应JS字符串中的\\\"),这样JSON.parse才能正确识别出原字符串里的引号。

正确处理方案

答案很明确:必须在服务端修复,理由如下:

  • 客户端处理会额外增加复杂度,手动转义很容易遗漏其他特殊字符,引入新的bug;
  • 服务端的职责就是输出符合标准的数据格式,让客户端可以直接用标准方法解析,这是前后端协作的最佳实践。

你临时用的Replace("\\\"", "\\\\\\\"")虽然能解决当前问题,但属于临时hack,更稳妥的方式是换用专门的JSON序列化库:

  • 如果你用的是.NET Framework,推荐用Newtonsoft.Json(也就是大家常说的Json.NET),它会严格遵循JSON标准处理转义,代码示例:
    List<SomeObject> someObject = new List<SomeObject>();
    SomeObject bla1 = new SomeObject();
    bla1.id = "1";
    bla1.label = "person";
    bla1.data = "bla means: \"lala\""; // 注意你原代码里把data字段误写成label了,这里修正一下
    someObject.Add(bla1);
    var bla = Newtonsoft.Json.JsonConvert.SerializeObject(someObject);
    
  • 如果是.NET Core或.NET 5+版本,直接用内置的System.Text.Json就可以,同样能生成标准的JSON:
    var bla = System.Text.Json.JsonSerializer.Serialize(someObject);
    

至于客户端处理的思路,完全不推荐——你得先扫描字符串修复未转义的引号,但这很容易误处理其他合法的转义字符,反而把问题搞复杂。

内容的提问来源于stack exchange,提问作者Adriano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:45:22