转义字符(\)对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 相关文章推荐
VBScript版代码高亮
Jun 26 Javascript
javascript 常用关键字列表集合
Dec 04 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
Feb 02 Javascript
仿微博字符限制效果实现代码
Apr 20 Javascript
详解AngularJS中的表达式使用
Jun 16 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
Oct 28 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
Dec 03 Javascript
node.js实现回调的方法示例
Mar 01 Javascript
Vue导出json数据到Excel电子表格的示例
Dec 04 Javascript
在微信小程序里使用watch和computed的方法
Aug 02 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
Sep 04 Javascript
vue 实现弹窗关闭后刷新效果
Apr 08 Vue.js
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使用curl实现ftp文件下载功能
2017/05/16 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
extjs render 用法介绍
2013/09/11 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
原生js实现验证码功能
2017/03/16 Javascript
简单实现jQuery轮播效果
2017/08/18 jQuery
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
python 模拟登陆163邮箱
2020/12/15 Python
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
"序列点" 是什么
2016/07/29 面试题
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
本科毕业生自荐信
2014/06/02 职场文书
人大调研汇报材料
2014/08/14 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
优秀党员个人总结
2015/02/14 职场文书
财务工作个人总结
2015/02/27 职场文书
公司管理建议书
2015/09/14 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS
Flink 侧流输出源码示例解析
2022/09/23 Servers
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript