你真的了解JSON么?

之前一篇文章(一步一步写爬虫之JSON解析)讲了JSON,只是着重介绍了JSON什么样子,至于JSON存在的意义,以及它如何用,却一笔带过了。这也是迫不得已的,这个公众号讲的很多技术名词,要是把它的概念、用途、实例、用法都塞到一篇文章里,可能大家从五环坐到一环都看不完。我个人觉得,长文会给人一种无形的压力,很多人一看到文章很长,要么跳着看看大概,要么收藏了以后再看,却往往都不会再看。所以我今天准备另开一篇,着重说下JSON和对象的关系。

这还得从面向对象里的「对象」说起。自从有了面向对象,程序员就喜欢上了对象这个东西。它可以封装,满足程序员的洁癖;也可以继承 ,满足程序员的懒惰。因此每次接到需求,都先要把用到的所有现实里的东西都抽象成对象。

一个对象其实就是一块内存,存储着属于本对象的一些数据。当然,它也会从「类」那里得到很多「方法」,这些方法大多数是来对自身的数据做一些逻辑上的操作。比如有一个对象叫「给产品经理讲技术公众号」,里面存了170多篇文章,作为自身的数据。还有一些操作这些数据的方法,比如「增加一篇文章」、「发布一篇文章」等等。

但是也有一种对象,没有什么特别的方法,唯一存在的意义就是用来存储数据。这可比那种原始的存储数据的方式高级多了。比如说你用数组,是可以存一组数据,但是他们必须要是相同类型的。但是对象可以存任意类型的数据。对象可以有任意个数的成员变量,每个成员变量都有自己的类型,有的是整数,有的是字符串,还有的,也可以是另一个对象。

方便归方便,对象作为一种高级的数据表达方式,在网络上传输的时候遇到了问题。举个例子,微信服务器上有一个对象「文章」,它有很多成员变量,比如「标题」、「作者」、「正文」、还有「留言」,每个变量可以存储一部分数据。现在你在微信客户端上请求这篇文章,如何才能把这个「文章」对象通过网络原封不动的传输过来呢?

我们知道,HTTP协议是基于文本的,它已经屏蔽了底层的比特数据流,转而使用更高级的「字符串」来传输数据。如果用HTTP协议来传输「对象」的话,你就得想办法把「对象」转换成「字符串」,而且接收端必须能够按照一定的规则把收到的「字符串」再转换成「对象」,这样才能达到「传输对象」的目的,是不是这个道理?

为此,程序员发明了JSON,它更像是一种格式,把一个对象拆开,每一个成员变量变成了key=value的形式写成字符串,最后用大括号包起来,拿到网络上传输,这个过程叫序列化。客户端收到这个JSON字符串之后,再按照相反的规则,把它拆开,取出里面所有的key=value,包装成一个对象,这个过程叫反序列化,也就是JSON的解析。

所以,JSON并不是凭空想出来的什么高深概念,包括技术上的很多其他的东西,都不是程序员闲的蛋疼捣鼓出来的。JSON就是为了解决「对象」在网络上传输的问题而诞生的。这时候你再看它的英文名JavaScript Object Notation,JavaScript的「对象」标记法,是不是觉得确实是这么回事儿?

来源:给产品经理讲技术,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/99547

发表评论

电子邮件地址不会被公开。 必填项已用*标注

侵权联系
分享本页
返回顶部