发表于: 2017-04-26 21:57:52
1 995
json用法,如何处理转义
小课堂【郑州 】
1.背景介绍
JSON 是一种轻量级的数据交换格式。 是适用于 Ajax 应用程序的一种有效格式,它使 js 对象和字符串值之间得以快速转换 JSON 同时也是一种传递对象的语法,对象可以是name/value对,数组和其他对象。 JSON传递的对象为函数时候必须是在js中进行传递,非js语言是没有办法辨别它的语法的。 JSON特性及用途 JSON是一种格式,基于文本,优于轻量,用于交换数据 像上面的例子中的格式的数据中标签本身就占据了很多空间,而JSON比较轻量,即相同数据,以JSON的格式占据的带宽更小,这在有大量数据请求和传递的情况下是有明显优势的。 举个最简单的例子,页面之间数据的交换(页面传参)。除了页面之间可以进行数据的交换,还有前后端之间的数据交换。 JSON转义数据的书写格式是:名称/值对。 名称/值对组合中的名称写在前面(在双引号中),值对写在后面,中间用冒号隔开,2个组合之间用逗号隔开,其中值可以是:数字整数或浮点数、字符串(在双引号中)、逻辑值(true或false)、数组(在方括号中)、对象(在花括号中)、null 使用方式: JSON传参的使用方法 JSON.parse的参数包含转移字符的时候会遇到两次转义的问题,其实第一次是字符串本身的转义,第二次是将真正转为js对象的转义。 将字符串'{"a":"b","b":"\\\\"}'传递给JSON.parse,首先解析器提取单引号括起来的字符串时认为第一个\转义第二个\ 第三个\转义第四个\, 也就是说实际可输出字符串是{"a":"b","b":"\\"} 之后正式转为js对象的时候还有一次转义, 也就是实际输出字符转中的第一个\转义第二个\(此时只有两个\)。 所以console.log(JSON.parse('{"a":"b","b":"\\\\"}') );输出结果为Object {a: "b", b: "\"}, 也就是说实际显示的数据为一个\(实际可输出一个\说明在此之前还有一个\)。 根据转义规则,实际输出一个\在这个\之前必定有一个\。所以如上第一行输出按照书写来说为'{"a":"b","b":"\\\\","c":{"b":"\\\\","a":{"b":"\\\\"}}}',可通过第三条输出来验证。 总结,如果想在js对象中出现一个\,需要在json字符串中出现四个\ 7.参考文献 参考一:ROBOTECH_ER博客 参考二:脚本之家 没有json对象,只有符合json格式的对象,所以问题应该换成普通的对象和json格式的对象有什么区别? 键名 必须是加双引号 可允许不加、加单引号、加双引号 属性值 只能是数值(10进制)、字符串(双引号)、布尔值和null, 爱啥啥 逗号问题 最后一个属性后面不能有逗号 可以 数值 前导0不能用,小数点后必须有数字 没限制J O S N是什么?
一种数据格式
姓名“金刚小葫芦”,身高“160cm”,体重“60kg”
name="金刚小葫芦" height="160cm" weight="60kg"
基于文本的数据格式
JSON是基于文本的数据格式,相对于基于二进制的数据,所以JSON在传递的时候是传递符合JSON这种格式的字符串,而不是一个对象。
轻量级的数据格式
被广泛地用于数据交换
2.知识剖析
var json = {"name":"myname","password":123456}
3.常见问题
4.解决方案
'{"a":"b","b":"\\\\"}'
JSON.parse('{"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":"\\\\"}}}'));
5.编码实战
6.扩展思考
"\\\'\'\\"
8.更多讨论
json格式与js对象语法的区别?
对比内容 JSON JS对象
也可以是数组或者符合JSON要求的对象,
不能是函数、NaN, Infinity, -Infinity和undefined
视频连接:https://v.qq.com/x/page/d0397m289as.html
评论