转义字符(\)对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 分页插件的改造方法(服务器端分页)
Jul 11 Javascript
无闪烁更新网页内容JS实现
Dec 19 Javascript
谷歌浏览器调试JavaScript小技巧
Dec 29 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
Apr 17 Javascript
javascript中利用柯里化函数实现bind方法
Apr 29 Javascript
JavaScript生成带有缩进的表格代码
Jun 15 Javascript
聊一聊Vue.js过渡效果
Sep 07 Javascript
layui选项卡效果实现代码
May 19 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
Jul 03 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
Apr 19 Javascript
详解React 条件渲染
Jul 08 Javascript
Vuex实现简单购物车
Jan 10 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
我用php+mysql写的留言本
2006/10/09 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
javascript 解析url的search方法
2010/02/09 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
jquery中EasyUI使用技巧小结
2015/02/10 Javascript
jQuery实现页面滚动时动态加载内容的方法
2015/03/20 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
2019/04/18 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
Python脚本实现集群检测和管理功能
2015/03/06 Python
Python用模块pytz来转换时区
2016/08/19 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
学雷锋宣传标语
2014/06/25 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
黑白记忆观后感
2015/06/18 职场文书
《藏戏》教学反思
2016/02/23 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
深入理解go slice结构
2021/09/15 Golang
利用Apache Common将java对象池化的问题
2022/06/16 Servers