转义字符(\)对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 相关文章推荐
使用GruntJS构建Web程序之Tasks(任务)篇
Jun 06 Javascript
Javascript如何判断数据类型和数组类型
Jun 22 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
Jul 01 Javascript
微信小程序 LOL 英雄介绍开发实例
Sep 30 Javascript
快速掌握jQuery插件开发
Jan 19 Javascript
javascript中replace使用方法总结
Mar 01 Javascript
js前端实现图片懒加载(lazyload)的两种方式
Apr 24 Javascript
axios 封装上传文件的请求方法
Sep 26 Javascript
Vue项目实现简单的权限控制管理功能
Jul 17 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
Nov 17 Vue.js
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
Dec 24 Javascript
js定时器出现第一次延迟的原因及解决方法
Jan 04 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中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
php 根据url自动生成缩略图并处理高并发问题
2014/01/23 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
浅析Javascript ES6新增值比较函数Object.is
2016/08/24 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
jquery网页加载进度条的实现
2017/06/01 jQuery
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
JS 数组基本用法入门示例解析
2020/01/16 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
python的urllib模块显示下载进度示例
2014/01/17 Python
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
Django migrations 默认目录修改的方法教程
2018/09/28 Python
Django 查询数据库并返回页面的例子
2019/08/12 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
Python 代码调试技巧示例代码
2020/08/11 Python
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
一道输出判断型Java面试题
2014/10/01 面试题
公司合作意向书
2014/04/01 职场文书
交通事故和解协议书
2014/09/25 职场文书
小学教代会开幕词
2016/03/04 职场文书
golang中的并发和并行
2021/05/08 Golang
Python编写冷笑话生成器
2022/04/20 Python
CSS元素定位之通过元素的标签或者元素的id、class属性定位详解
2022/09/23 HTML / CSS