转义字符(\)对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 相关文章推荐
Google Suggest ;-) 基于js的动态下拉菜单
Oct 11 Javascript
jquery.validate使用攻略 第三部
Jul 01 Javascript
javascript跑马灯悬停放大效果实现代码
Dec 12 Javascript
js 有框架页面跳转(target)三种情况下的应用
Apr 09 Javascript
JS的千分位算法实现思路
Jul 31 Javascript
javascript的parseFloat()方法精度问题探讨
Nov 26 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
Sep 04 Javascript
原生js实现百叶窗效果及原理介绍
Apr 12 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
Aug 18 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
Jan 08 Javascript
Vue axios 跨域请求无法带上cookie的解决
Sep 08 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
Nov 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
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
canvas的神奇用法
2017/02/03 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
vue调用本地摄像头实现拍照功能
2020/08/14 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
python新手经常遇到的17个错误分析
2014/07/30 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
利用scikitlearn画ROC曲线实例
2020/07/02 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
HTML5 weui使用笔记
2019/11/21 HTML / CSS
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
网站创业计划书
2014/04/30 职场文书
标准版离职证明书
2014/09/12 职场文书
学校计划生育责任书
2015/05/09 职场文书
论文致谢词范文
2015/05/14 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS