转义字符(\)对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 相关文章推荐
20个非常有用的PHP类库 加速php开发
Jan 15 Javascript
JS代码同步文本框内容的实例方法
Jul 12 Javascript
用jQuery获取table中行id和td值的实现代码
May 19 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
Jun 13 Javascript
老生常谈javascript变量的命名规范和注释
Sep 29 Javascript
javascript+html5+css3自定义弹出窗口效果
Oct 26 Javascript
详解JSON和JSONP劫持以及解决方法
Mar 08 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
Mar 19 Javascript
vue中注册自定义的全局js方法
Nov 15 Javascript
vue移动端的左右滑动事件详解
Jun 17 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
Jul 14 Javascript
vue中路由跳转不计入history的操作
Sep 21 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 GD 图像处理组件的常用函数总结
2010/04/28 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
全面解析Bootstrap中form、navbar的使用方法
2016/05/30 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
pymongo为mongodb数据库添加索引的方法
2015/05/11 Python
浅谈python新手中常见的疑惑及解答
2016/06/14 Python
python numpy格式化打印的实例
2018/05/14 Python
linux安装Python3.4.2的操作方法
2018/09/28 Python
Python生成rsa密钥对操作示例
2019/04/26 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
2019/07/19 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
西班牙床垫网上商店:Colchones.es
2018/05/06 全球购物
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
创意活动策划书
2014/01/15 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
教育系统干部作风整顿心得体会
2014/09/09 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
学习十八大的感悟
2015/08/11 职场文书
Python Django获取URL中的数据详解
2021/11/01 Python
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python