转义字符(\)对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 变量、作用域及内存
Apr 08 Javascript
jquery插件jSignature实现手动签名
May 04 Javascript
javascript实现简单的页面右下角提示信息框
Jul 31 Javascript
javascript中html字符串转化为jquery dom对象的方法
Aug 27 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
Nov 03 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
Jan 21 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
Apr 21 Javascript
vue之数据交互实例代码
Jun 20 Javascript
Nginx 配置多站点vhost 的方法
Jan 07 Javascript
Vue入门之animate过渡动画效果
Apr 08 Javascript
webpack 插件html-webpack-plugin的具体使用
Apr 09 Javascript
使用Typescript开发微信小程序的步骤详解
Jan 12 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
php smarty模版引擎中的缓存应用
2009/12/02 PHP
PHP二维数组去重算法
2016/12/17 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
jquery ajax 登录验证实现代码
2009/09/23 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
Angularjs 制作购物车功能实例代码
2016/09/14 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
javascript表单正则应用
2017/02/04 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
详解Python IO编程
2020/07/24 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
怎么样写好简历中的自我评价
2013/10/25 职场文书
五型班组建设方案
2014/02/10 职场文书
论文指导教师评语
2014/04/28 职场文书
会计专业毕业生求职信
2014/07/04 职场文书
公司收款委托书范本
2014/09/20 职场文书
安全生产工作汇报
2014/10/28 职场文书
小学生作文批改评语
2014/12/25 职场文书
大学生逃课检讨书
2015/05/04 职场文书
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS