我们先来看一个JS中常见的JS对象序列化成JSON字符串的问题。
另一个叫JSON.parse,用于转化json字符串到JS数据构造,它很严格,你的JSON字符串如不雅构造地纰谬,是没办法解析的。
(先不要急着复制粘贴到控制台,先本身打开一个代码编辑器或者纸,写写看,写完再去细心比较你的┞菲握台输出,如不雅有误记得看完全文并评论,哈哈。)
第二个问题,如不雅我想在最终JSON字符串将这个'friend'的姓名全部变成大年夜写字母,也就是把"Good"变成"GOOD",把"Man"变成"MAN",那么可以怎么做?
基于以上两个问题,我们再追本溯源问一下:
- JSON毕竟是什么器械?
- 为什么JSON就是易于数据交换?
- JSON和JS对象的差别?
- JS中JSON.parse、JSON.stringify和不常见的toJSON,这几个函数的参数和处理细节到底是如何的?
欲望全文能让如之前的我一样对JSON一知半解的亲能说清跋扈JSON是什么,也能闇练应用JSON,不看控制台就知道JS对象序列化成JSON字符串后输出是啥。
JSON 是一种格局
- 基于文本,优于轻量,用于交换数据
如不雅没有去过JSON的官方介绍可以去一下这里,官方介绍第一、二段已经很清跋扈地表述了JSON是什么,我将JSON是什么提炼成以下几个方面:
1.一种数据格局
什么是格局?就是规范你的数据要怎么表示,举个栗子,有小我叫“二百六”,身高“160cm”,体重“60kg”,如今你要将这小我的┞封些信息传给别人或者其余什么器械,你有很多种选择:
- 姓名“二百六”,身高“160cm”,体重“60kg”
- name="二百六"&height="160cm"&weight="60kg"
- <person><name>二百六</name><height>160</height><weight>60</weight></person>
- {"name":"二百六","height":160,"weight":60}
- ... ...
以上所有选择,传递的数据是一样的,然则你可以看到情势是可以各种各样的,这就是各类不合格局化后的数据,JSON是个一一种表示方法。
2.基于文本的数据格局
JSON是基于文本的数据格局,相对于基于二进制的数据,所以JSON在传递的时刻是传递相符JSON这种格局(至于JSON的格局是什愦我们第二部分再说)的字符串,我们常会称为“JSON字符串”。
3.轻量级的数据格局
在JSON之前,有一个数据格局叫xml,如今照样广泛在用,然则JSON加倍轻量,如xml须要用到很多标签。
像膳绫擎的例子中,你可以明显看到xml格局的数据中标签本身占据了很多空间,而JSON比较轻量,即雷同数据,以JSON的格局占据的带宽更小,这在有大年夜量数据要乞降传递的情况下是有明显优势的。
4.被广泛地用于数据交换
1).前端结垢荷琐JS对象,用于包装要传递的数据,然后将JS对象转化为JSON字符串,再发送请求到后端;
2).后端PHP接收到这个JSON字符串,将JSON字符串转化为PHP对象,然后处理请求。
前端结垢荷琐JS对象,用于包装要传递的数据,然后将JS对象转化为JSON字符串,再发送请求到后端;
后端PHP接收到这个JSON字符串,将JSON字符串转化为PHP对象,然后处理请求。
可以看到,雷同的数据在这里有3种不合的表示情势,分别是前端的JS对象、传输的JSON字符串、后端的PHP对象。
JS对象和PHP对象明显不是一个器械,然则因为大年夜家用的都是JSON来传递数据,大年夜家都能懂得这种数据格局,都能把JSON这种数据格局很轻易地转化为本身能懂得的数据构造。
这就便利啦,在其他各类说话情况中交换数据都是如斯。
JSON 和 JS 对象之间的“八卦”
很多时刻都听到“JSON是JS的一个子集”这句话,并且这句话我曾经也一向这么认为,每个相符JSON格局的字符串你解析成js都是可以的,直到后来发清楚明了一个奇奇滚滚的器械...
1.两个本质不合的器械为什么那么密切
JSON和JS对象本质上完全不是同一个器械,就像“斑马线”和“斑马”,“斑马线”基于“斑马”身上的条纹来竽暌箍现和定名,然则斑马是活的,斑马线长短生物。
同样,"JSON"全名"JavaScript Object Notation",所以它的格局(语法)是基于JS的,但它就是一种格局,而JS对象是一个实例,是存在于内存的一个器械。
说句打趣话,如不雅JSON是基于PHP的,可能就叫PON了,情势可能就是如许的了['propertyOne' => 'foo', 'propertyTwo' => 42,],如不雅如许,那么JSON可能如今是和PHP比脚绫擒切了。
此外,JSON是可以传输的,因为它是文本格局,然则JS对象是没办法传输的,在语法上,JSON也会加倍严格,然则JS对象就很松了。
那么两个不合的器械为什么那么密切,因为JSON毕竟是大年夜JS中演变出来的,语法邻近。
2.JSON 格局比 JS 对象语法严格的表示
先就以“键值对为表示的对象”情势上,比较下两者的不合,至于JSON还能以如何的情势表示,比较完后再列举。
如不雅是数组情势,那么key是索引值,而value是这个数组项,你可以在控制台在这个函数内部打印出来这个key和value验证,记得要在函数内部返回value,不然会掉足。
可以看到,相对于JS对象,JSON的格局更严格,所以大年夜部分写的JS对象是不相符JSON的格局的。
推荐阅读
在以前的20年中,以硬件为中间的敕令行接口(CLI)驱动的架构和治理企业收集的方法一向保持,当收集是可猜测的,有一个出口到互联网并且可以或许获得包管时,依附CLI来治理收集没有问题,但事实并非如斯。收集已经变得>>>详细阅读
本文标题:由里到外步步深挖,深入理解JSON
地址:http://www.17bianji.com/lsqh/34586.html
1/2 1