3.JSON 不是 JS 的子集
起首看下面的代码,你可以copy到控制台履行下:
不过遗憾的是,以上所用的3个函数,不兼容IE7以及IE7之前的浏览器。有关兼容性的评论辩论,留待之后吧。如不雅想直接在应用上解决兼容性,那么可以套用JSON官方的js,可以解决。
这两个字符\u2028和\u2029分别表示行分隔符和段落分隔符,JSON.parse可以正常解析,然则当做js解析时会报错。
这几个 JS 中的 JSON 函数
在JS中我们重要会接触到两个和JSON相干的函数,分别用于JSON字符串和JS数据构造之间的转化。
一个叫JSON.stringify,它很聪慧,聪慧到你写的不相符JSON格局的JS对象都能帮你处理成相符JSON格局的字符串,所以你得知道它到底干了什么,免得它只是自作聪慧,然后让你Debug long time。
笑笑就好,别如许用,序列化是为了传输,传输就是能越小越好,加莫名其妙的缩进符,解析艰苦(如不蚜?鲋符串的话),也弱化了轻量化这个特点。。
而它们的参数不指荷琐,固然我们经常用的时刻只传入一个参数。
此外,还有一个toJSON函数,我们较少看到,然则它会影响JSON.stringify。
1.JS 数据构造转化为 JSON 字符串
将JS数据构造转化为JSON字符串 —— JSON.stringify
这个函数的函数签名是如许的:
轻量已经是一个用于数据交换的优势了,但更重要的JSON是易于浏览、编写和机械解析的,即这个JSON对人和机械都是友爱的,并且又轻,自力于说话(因为是基于文本的),所以JSON被广泛用于数据交换。
下面将分别展开带1~3个参数的用法,最后是它在序列化时髦的一些“聪慧”的事,要特别留意。
请问:以下JS对象经由过程JSON.stringify后的字符串是如何的?
1.1 根本应用 —— 仅需一个参数
这个大年夜家都邑应用,传入一个JSON格局的JS对象或者数组,JSON.stringify({"name":"Good Man","age":18})返回一个字符串"{"name":"Good Man","age":18}"。
可以看到本身我们传入的┞封个JS对象就是相符JSON格局的,用的双引号,也没有JSON不接收的属性值,那么如不雅像开首那个例子中的一样,how to play?
以前端JS进行ajax的POST请求为例,后端PHP处理请求为例:
不急,我们先举简单的例子来解释这个函数的几个参数的意义,再来嗣魅这个问题。
1.2 第二个参数可所以函数,也可所以一个数组
- 如不雅第二个参数是一个函数,那么序列化过程中的每个属性都邑被这个函数转化和处理
- 如不雅第二个参数是一个数组,那么只有包含在这个数组中的属性才会被序列化到最终的JSON字符串中
- 如不雅第二个参数是null,那感化上和空着没啥差别,然则不想设置第二个参数,只是想设置第三个参数的时刻,就可以设置第二个参数为null
这第二个参数若是函数
如不雅制订了第二个参数是函数,那么这个函数必须对每一项都有返回,这个函数接收两个参数,一个键名,一个是属性值,函数必须针对每一个本来的属性值都要有新属性值的返回。
那么问题来了,如不雅传入的不是键值对的对象情势,而是方括号的数组情势呢?,比瘸琅绫擎的friend变成如许:friend=["Jack","Rose"],那么这个逐属性处理的函数接收到的key和value又是什么?
这第二个参数若是数组
如不雅第二个参数是一个数组,那么只有在数组中出现的属性才会被序列化进结不雅字符串,只要在这个供给的数组中找不到的属性就不会被包含进去,而这个数组中存在然则源JS对象中不存在的属性会被忽视,不会报错。
1.3 第三个参数用于美化输出 —— 不建议用
指定缩进用的空白字符,可以取以下几个值:
- 是1-10的某个数字,代表用几个空白字符
- 是字符串的话,就用该字符串代替空格,最多取这个字符串的前10个字符
- 没有供给该参数 等于 设置成null 等于 设置一个小于1的数
1.4 留意这个函数的“小聪慧”(重要)
如不雅有其他不肯定的情况,那么最好的办法就是"Have a try",控制台做下实验就清楚明了。
- 键名不是双引号的(包含没有引号或者是单引号),会主动变成双引号;字符串是单引号的,会主动变成双引号
- 最后一个属性后面有逗号的,会被主动去掉落
- 非数组对象的属性不克不及包管以特定的次序涌如今序列化后的字符串中
推荐阅读
在以前的20年中,以硬件为中间的敕令行接口(CLI)驱动的架构和治理企业收集的方法一向保持,当收集是可猜测的,有一个出口到互联网并且可以或许获得包管时,依附CLI来治理收集没有问题,但事实并非如斯。收集已经变得>>>详细阅读
本文标题:由里到外步步深挖,深入理解JSON
地址:http://www.17bianji.com/lsqh/34586.html
1/2 1