转义字符(\)对JavaScript中JSON.parse的影响概述


Posted in Javascript onJuly 17, 2013

按照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":"\\\\"}}}'));输出结果如下图
pic
根据转义规则,实际输出一个\在这个\之前必定有一个\。所以如上第一行输出按照书写来说为'{"a":"b","b":"\\\\","c":{"b":"\\\\","a":{"b":"\\\\"}}}',可通过第三条输出来验证。
总结,如果想在js对象中出现一个\,需要在json字符串中出现四个\ 。

对于其他的其他的特殊字符
1.双引号("),如果正确出现双引号应为\\\"
2.\n,如想想出现正确的换行需要json字符串中是\\n,其实是先对\n中的\转义,n变成了普通字符,在解析为js对象的时候n与之前的\(只有一个\了)被解释为换行。如下的两个与此类似。
3.\r,\\r
4.\t,\\t

Javascript 相关文章推荐
jquery photoFrame 图片边框美化显示插件
Jun 28 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
Jan 23 Javascript
Jquery操作Ajax方法小结
Nov 29 Javascript
JS随机打乱数组的方法小结
Jun 22 Javascript
jQuery继承extend用法详解
Oct 10 Javascript
JavaScript中利用for循环遍历数组
Jan 15 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
Jan 20 Javascript
基于easyui checkbox 的一些操作处理方法
Jul 10 Javascript
微信小程序之前台循环数据绑定
Aug 18 Javascript
layui实现table加载的示例代码
Aug 14 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
Sep 21 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
Sep 26 Javascript
JS随机生成不重复数据的实例方法
Jul 17 #Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
Jul 17 #Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
Jul 17 #Javascript
js中如何把字符串转化为对象、数组示例代码
Jul 17 #Javascript
js函数setTimeout延迟执行的简单介绍
Jul 17 #Javascript
JavaScript地图拖动功能SpryMap的简单实现
Jul 17 #Javascript
js导出格式化的excel 实例方法
Jul 17 #Javascript
You might like
PHP脚本的10个技巧(6)
2006/10/09 PHP
PHP文件上传实例详解!!!
2007/01/02 PHP
判断是否为指定长度内字符串的php函数
2010/02/16 PHP
php后退一页表单内容保存实现方法
2012/06/17 PHP
php cc攻击代码与防范方法
2012/10/18 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
PHP类的特性实例分析
2016/09/28 PHP
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
jQuery序列化后的表单值转换成Json
2017/06/16 jQuery
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
three.js实现圆柱体
2018/12/30 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
Python 实现微信防撤回功能
2019/04/29 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
在什么时候需要使用"常引用"
2015/12/31 面试题
预备党员综合考察材料
2014/05/31 职场文书
党员干部作风建设思想汇报范文
2014/10/25 职场文书
中班教师个人总结
2015/02/05 职场文书
运动员入场前导词
2015/07/20 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang
Python实现生活常识解答机器人
2021/06/28 Python
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫