Email:longsu2010 at yeah dot net

按照ECMA262第五版中的解释,JSON是一个提供了stringify和parse方法的内置对象,前者用于将js对象转化为符合json标准的字符串,后者将符合json标准的字符串转化为js对象。json标准参考<a href="http://json.org/" target="_blank">json.org</a>。(其实将符合json标准的字符串转化为js对象可以用eval,但是eval性能相对差且存在安全隐患(会执行json字符串中的代码),本文仅写JSON)
本文写的是转义字符对JSON.parse方法的影响。
一般来说在JSON.parse的参数包含转移字符的时候会遇到两次转义的问题,其实第一次是字符串本身的转义,第二次是将真正转为js对象的转义。
举例如下:
例子一:将字符串'{"a":"b","b":"\\\\"}'传递给JSON.parse,首先解析器提取单引号括起来的字符串时认为第一个\转义第二个\ 第三个\转义第四个\,也就是说实际可输出字符串是{"a":"b","b":"\\"}(可通过console.log('{"a":"b","b":"\\\\"}')验证),之后正式转为js对象的时候还有一次转义,也就是实际输出字符转中的第一个\转义第二个\(此时只有两个\)。所以console.log(JSON.parse('{"a":"b","b":"\\\\"}') );输出结果为Object {a: "b", b: "\"},也就是说实际显示的数据为一个\(实际可输出一个\说明在此之前还有一个\)。
例子二:

var obj = {
a : "b",
b : "\\",
c : {
b : "\\",
a : {
b : "\\"
}
}
};
var json_str = JSON.stringify(obj);
console.log( JSON.stringify(obj) );
console.dir(JSON.parse(json_str));
console.dir(JSON.parse('{"a":"b","b":"\\\\","c":{"b":"\\\\","a":{"b":"\\\\"}}}'));

输出结果如下图

根据转义规则,实际输出一个\在这个\之前必定有一个\。所以如上第一行输出按照书写来说为'{"a":"b","b":"\\\\","c":{"b":"\\\\","a":{"b":"\\\\"}}}',可通过第三条输出来验证。

总结,如果想在js对象中出现一个\,需要在json字符串中出现四个\ 。

对于其他的其他的特殊字符

1.双引号("),如果正确出现双引号应为\\\"

2.\n,如想想出现正确的换行需要json字符串中是\\n,其实是先对\n中的\转义,n变成了普通字符,在解析为js对象的时候n与之前的\(只有一个\了)被解释为换行。如下的两个与此类似。

3.\r,\\r

4.\t,\\t

最新文章

  1. Java设计模式(一) 策略模式
  2. php常用判断的函数
  3. ural 2065. Different Sums
  4. Json数据格式事例查看
  5. C# random生成随机数全部一样
  6. saltstack之(五)数据系统Grains和Pillar
  7. IOS9以上如何导入铃声并设置
  8. C# List 用法与示例
  9. 学习笔记6_Java_day11_JSP_基础和入门(1、2)
  10. Java 基础(一)
  11. 彻底解决TAP(点透)提升移动端点击响应速度
  12. Windows挂钩注入DLL
  13. 无需sendmail:巧用LD_PRELOAD突破disable_functions
  14. Springboot 2.返回cookies信息的get接口开发 和 带cookis去请求
  15. 使用JBolt新建Maven版工程步骤
  16. Java中如何创建一个新的对象的/Creating Objects/
  17. liunx tomcat 运行模式apr
  18. windows 安装mysql 5.7的正确姿势
  19. 读书笔记 C# yield return与yield break执行顺序的浅析
  20. web service 部 分

热门文章

  1. 关于PHP的工作流引擎
  2. [转载]C#播放流媒体的几种方法
  3. Erlang常用代码段
  4. 基于NHibernate二级缓存的MongoDB组件
  5. 点击按钮,通过JS代码实现复制INPUT表单,表格:
  6. PLSQL-Developer数据库连接工具使用方法
  7. 使用JasperReport+iReport进行Web报表开发
  8. 带你走近AngularJS 之创建自定义指令
  9. Salt状态管理
  10. Kraken.js!