转义字符(\)对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 相关文章推荐
Mootools 1.2教程 Tooltips
Sep 15 Javascript
从零开始学习jQuery (二) 万能的选择器
Oct 01 Javascript
javascript动态向网页中添加表格实现代码
Feb 19 Javascript
jQuery动态创建html元素的常用方法汇总
Sep 05 Javascript
onclick和onblur冲突问题的快速解决方法
Apr 28 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
Jun 17 Javascript
Vue多种方法实现表头和首列固定的示例代码
Feb 02 Javascript
使用Vue实现图片上传的三种方式
Jul 17 Javascript
详解vue-cli下ESlint 配置说明
Sep 03 Javascript
package.json配置文件构成详解
Aug 27 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
Feb 12 Javascript
Js图片点击切换轮播实现代码
Jul 27 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
php连接与操作PostgreSQL数据库的方法
2014/12/25 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
js之onload事件的一点使用心得
2013/08/14 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
详解Angular 自定义结构指令
2017/06/21 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
教你如何编写Vue.js的单元测试的方法
2018/10/17 Javascript
js数组去重的方法总结
2019/01/18 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
Python实现从URL地址提取文件名的方法
2015/05/15 Python
python使用正则筛选信用卡
2019/01/27 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
2020/10/18 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
先进班级集体事迹材料
2014/01/30 职场文书
营销总监岗位职责
2014/09/16 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
2015团员个人年度总结
2015/11/24 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android