转义字符(\)对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一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
Aug 28 Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
May 25 Javascript
jQuery中校验时间格式的正则表达式小结
Sep 22 Javascript
jQuery jcrop插件截图使用方法
Nov 20 Javascript
文本域中换行符的替换示例
Mar 04 Javascript
JavaScript 事件绑定及深入
Apr 13 Javascript
js+ajax实现获取文件大小的方法
Dec 08 Javascript
jQuery插件passwordStrength密码强度指标详解
Jun 24 Javascript
node.js 利用流实现读写同步,边读边写的方法
Sep 11 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
Nov 27 Javascript
Jquery的Ajax技术使用方法
Jan 21 jQuery
ES6的异步终极解决方案分享
Jul 11 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数组交集的优化代码分析
2011/03/06 PHP
PHP 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
php在apache环境下实现gzip配置方法
2015/04/02 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
js对象的比较
2011/02/26 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
详解Vue使用 vue-cli 搭建项目
2017/04/20 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
Python 元组(Tuple)操作详解
2014/03/11 Python
Python获取服务器信息的最简单实现方法
2015/03/05 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
对pandas中apply函数的用法详解
2018/04/10 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
幼儿园运动会加油词
2014/02/14 职场文书
内刊编辑求职自荐书范文
2014/02/19 职场文书
销售员求职个人的自我评价
2014/02/19 职场文书
安全责任协议书
2014/04/21 职场文书
雷人标语集锦
2014/06/19 职场文书
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库