转义字符(\)对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 contains过滤器实现精确匹配使用方法
Apr 12 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
Apr 10 Javascript
javascript实现网页背景烟花效果的方法
Aug 06 Javascript
基于Bootstrap重置输入框内容按钮插件
May 12 Javascript
JavaScript简单获取页面图片原始尺寸的方法
Jun 21 Javascript
Vue实现动态显示textarea剩余字数
May 22 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
May 29 Javascript
vue路由守卫及路由守卫无限循环问题详析
Sep 05 Javascript
解决layui弹出层layer的area过大被遮挡的问题
Sep 21 Javascript
Vue移动端实现图片上传及超过1M压缩上传
Dec 23 Javascript
vue addRoutes路由动态加载操作
Aug 04 Javascript
js实现手表表盘时钟与圆周运动
Sep 18 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
如何分别全角和半角以避免乱码
2006/10/09 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
2014/08/25 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
python实现kNN算法
2017/12/20 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
PyQt弹出式对话框的常用方法及标准按钮类型
2019/02/27 Python
python 二维矩阵转三维矩阵示例
2019/11/30 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
外贸业务员求职自荐信分享
2013/09/21 职场文书
酒店副总岗位职责
2013/12/24 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书