你真的了解JSON么?
Posted 给产品经理讲技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你真的了解JSON么?相关的知识,希望对你有一定的参考价值。
这还得从面向对象里的「对象」说起。自从有了面向对象,程序员就喜欢上了对象这个东西。它可以封装,满足程序员的洁癖;也可以继承 ,满足程序员的懒惰。因此每次接到需求,都先要把用到的所有现实里的东西都抽象成对象。
但是也有一种对象,没有什么特别的方法,唯一存在的意义就是用来存储数据。这可比那种原始的存储数据的方式高级多了。比如说你用数组,是可以存一组数据,但是他们必须要是相同类型的。但是对象可以存任意类型的数据。对象可以有任意个数的成员变量,每个成员变量都有自己的类型,有的是整数,有的是字符串,还有的,也可以是另一个对象。
方便归方便,对象作为一种高级的数据表达方式,在网络上传输的时候遇到了问题。举个例子,微信服务器上有一个对象「文章」,它有很多成员变量,比如「标题」、「作者」、「正文」、还有「留言」,每个变量可以存储一部分数据。现在你在微信客户端上请求这篇文章,如何才能把这个「文章」对象通过网络原封不动的传输过来呢?
我们知道,HTTP协议是基于文本的,它已经屏蔽了底层的比特数据流,转而使用更高级的「字符串」来传输数据。如果用HTTP协议来传输「对象」的话,你就得想办法把「对象」转换成「字符串」,而且接收端必须能够按照一定的规则把收到的「字符串」再转换成「对象」,这样才能达到「传输对象」的目的,是不是这个道理?
为此,程序员发明了JSON,它更像是一种格式,把一个对象拆开,每一个成员变量变成了key=value的形式写成字符串,最后用大括号包起来,拿到网络上传输,这个过程叫序列化。客户端收到这个JSON字符串之后,再按照相反的规则,把它拆开,取出里面所有的key=value,包装成一个对象,这个过程叫反序列化,也就是JSON的解析。
所以,JSON并不是凭空想出来的什么高深概念,包括技术上的很多其他的东西,都不是程序员闲的蛋疼捣鼓出来的。JSON就是为了解决「对象」在网络上传输的问题而诞生的。这时候你再看它的英文名javascript Object Notation,JavaScript的「对象」标记法,是不是觉得确实是这么回事儿?
以上是关于你真的了解JSON么?的主要内容,如果未能解决你的问题,请参考以下文章