转义字符(\)对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 this 深入理解
Jul 30 Javascript
DLL+ ActiveX控件+WEB页面调用例子
Aug 07 Javascript
js整数字符串转换为金额类型数据(示例代码)
Dec 26 Javascript
jquery中对于批量deferred的处理方法
Jan 22 Javascript
jquery实现简单的遮罩层
Jan 08 Javascript
基于javascript制作微信聊天面板
Aug 09 Javascript
javascript运算符——位运算符全面介绍
Jul 14 Javascript
vue.js事件处理器是什么
Mar 20 Javascript
用原生JS实现简单的多选框功能
Jun 12 Javascript
vue-resource 拦截器(interceptor)的使用详解
Jul 04 Javascript
vue服务端渲染缓存应用详解
Sep 12 Javascript
jQuery实现的移动端图片缩放功能组件示例
May 01 jQuery
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给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
jquery 指南/入门基础
2007/11/30 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
javascript的BOM
2016/05/03 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
浅谈js中的in-for循环
2016/06/28 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
艺术用品:Arteza
2018/11/25 全球购物
六道php面试题附答案
2014/06/05 面试题
自我评价中英文语句
2013/11/30 职场文书
绿化先进工作者事迹材料
2014/01/30 职场文书
世界读书日的活动方案
2014/08/20 职场文书
大雁塔英文导游词
2015/02/10 职场文书
企业财务经理岗位职责
2015/04/08 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
公司出差管理制度范本
2015/08/05 职场文书
Python合并多张图片成PDF
2021/06/09 Python