转义字符(\)对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 相关文章推荐
深入理解JavaScript系列(2) 揭秘命名函数表达式
Jan 15 Javascript
js 遍历json返回的map内容示例代码
Oct 29 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
Mar 05 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
May 10 Javascript
javascript比较两个日期的先后示例代码
Dec 31 Javascript
jQuery实现提示密码强度的代码
Jul 15 Javascript
js+css简单实现网页换肤效果
Dec 29 Javascript
JavaScript知识点总结之如何提高性能
Jan 15 Javascript
利用原生JS自动生成文章标题树的实例
Aug 22 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
Mar 05 Javascript
Node.js引入UIBootstrap的方法示例
May 11 Javascript
Vue表单控件数据绑定方法详解
Feb 05 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 中include()与require()的对比
2006/10/09 PHP
奇怪的PHP引用效率问题分析
2012/03/23 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
utf8的编码算法 转载
2006/12/27 Javascript
javawscript 三级菜单的实现原理
2009/07/01 Javascript
JavaScript 内置对象属性及方法集合
2010/07/04 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
JS实现图片剪裁并预览效果
2016/08/12 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
2020/08/13 Javascript
Vue的Options用法说明
2020/08/14 Javascript
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
django模板结构优化的方法
2019/02/28 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
python中设置超时跳过,超时退出的方式
2019/12/13 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
PHP中如何创建和修改数组
2012/05/02 面试题
数据库专业英语
2012/11/30 面试题
预备党员党校学习自我评价分享
2013/11/12 职场文书
污水厂厂长岗位职责
2014/01/04 职场文书
预备党员入党思想汇报
2014/01/04 职场文书
教学评估实施方案
2014/03/16 职场文书
关于国庆节的演讲稿
2014/09/05 职场文书
2015感人爱情寄语
2015/02/26 职场文书
借条如何写
2015/05/26 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫
Java死锁的排查
2022/05/11 Java/Android