JavaScript JSON字符串转对象时的转义字符处理陷阱

作者:青柠

时间:2026-10-22

浏览:540

本文探讨了在JavaScript中将后台生成的JSON字符串转换为对象时,因特殊字符未正确转义导致的解析错误。重点分析了JavaScript原生replace方法仅替换首个匹配项的行为局限,并通过扩展String原型添加replaceAll功能,结合正则表达式全局匹配标志,实现了特殊字符的完整替换,确保JSON字符串能顺利被eval或解析函数处理。

文章目录

JSON序列化中的转义问题

在使用JavaScriptSerializer.Serialize方法将对象序列化为JSON字符串时,可能会遇到后台生成的JSON字符串中包含未转义的特殊字符代码的情况。

这些特殊字符代码在使用JavaScript将JSON字符串转换为对象时,往往会导致报错。为了解决这个转义问题,需要花费大量精力进行处理,这确实增加了开发难度。

后台序列化的对象结构为。

Dictionary<string,string> DepartmentsExistTaskCounts

在前端页面中,使用MVC框架下的Razor语法,直接调用后台方法将数据序列化为JSON并赋值给脚本变量。

var jsonstr  = "@(JSONHelper.ObjectToJSON(DepartmentsExistTaskCounts))";

实际执行后,发现原本的特殊字符已被编码为HTML实体形式出现。

var jsonstr  = "{&quot;1&quot;:&quot;0&quot;,&quot;2&quot;:&quot;0&quot;,&quot;3&quot;:&quot;0&quot;}";

replace方法的局限性及解决方案

尝试使用replace方法来替换这些编码字符,但发现replace方法默认只替换第一个匹配项,导致后续字符未被处理,经过调试才确认这一行为。

为解决此问题,需要为String对象扩展replaceAll方法,从而完成所有匹配项的替换。

这种默认行为确实容易给开发者带来困扰。

前端相关脚本代码片段如下:

前端代码实现示例


 <script type="text/javascript">
     //扩展javascript 的replace方法
     String.prototype.replaceAll = function(s1,s2){
       return this.replace(new RegExp(s1,"gm"),s2);
     }
     var counts = parseInt("@(DepartmentCounts)");     
     var gDepartmentsAddCount = {};   
     var jsonstr = "@(JSONHelper.ObjectToJSON(DepartmentsExistTaskCounts))";
     jsonstr = jsonstr.replaceAll(""","'");
     gDepartmentsAddCount = ToJson( jsonstr );   
     //JSon转换
     function ToJson(json) {
       try { return eval(json); }
       catch (e) {
         try { return eval('(' + json + ')'); }
         catch (e) { 
           //alert(json);
         }
       }
     }
 </script>

总结

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对本站的支持。如果你想了解更多相关内容请查看下面相关链接

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章