json

图片来自网络

在 Quora 上看到一个关于 "JSON是什么" 的回答,用了两个例子解释了 为什么需要JSON,JSON是怎么工作的,非常容易理解。


JSON的来源


如果挪威想将一条非常重要的信息送到西班牙,那么他们该怎么操作?


挪威可以使用挪威语将信息发出,然后在西班牙找一个既懂挪威语,又懂西班牙语的家伙,叫他把发送过来的信息翻译成西班牙语。


或者是在挪威找一个既懂挪威语,又懂西班牙语的家伙,叫他把信息翻译成西班牙语之后,再向西班牙发送。


以上的两种方式,我们都需要一个懂两种语言的人充当翻译官。


另外,如果挪威希望和俄罗斯交流,就需要聘请一个既懂挪威语又懂俄语的翻译官;如果希望和法国交流,就需要聘请一个既懂挪威语又懂法语的翻译官;如果希望和韩国交流,就需要聘请一个既懂挪威语又懂韩语的翻译官 ... ....


上面描述的交流方式未免太过麻烦,一个国家需要与多少个国家交流,就需要配置多少个翻译官,造成严重的资源浪费。如果我们选择一种语言作为各个国家之间通用的交流语言,情况就会好很多。


比如,我们选择将英语作为通用的交流语言,各个国家都配置一个既懂本国语言,又懂英语的翻译官,就可以实现与其他国家之间的无障碍交流。



Example

同样的,在编程界也有各种语言,而各种编程语言之间的数据交互也遇到了相同的问题。


JSON就在各个编程语言之间充当一种通用的语言,其作用仅仅是用于数据交流,不涉及逻辑。


例如 ,PHP 和 JavaScript 希望彼此之间进行数据交互,它们不需要特意去学习对方的语言。PHP将要传送的数据变为JSON格式发送给JavaScript,JavaScript接收之后,还原成自己的数据格式;同样的,也可以JavaScript将数据变为JSON格式,由PHP接收后还原成自己的数据格式。


现在,你可以只学一种编程语言,外加数据交互语言--JSON,就可以与其他任何语言的程序进行通讯;


虽然,多国交流 的例子很好的解释了 JSON是什么,但却不能解释JSON如何工作。毕竟,英语是一种非常复杂的语言,需要大量的时间来学习,而 JSON “语言” 却非常简单易学。让我们用另一个类比来描述 JSON这种 “语言” 的 “语法” ;

JSON 如何工作


让我们暂时忘记上面的例子。想象一下,你的老板交给你一项新的任务:写一份关于2017年新车的报告。


你努力地搜寻了能够找到的所有资料,然后列出了大段文字描述所有2017年的新车:



2017新车报告-1

虽然,你努力收集了大量的信息,但我不认为你的老板会愉快的表扬你的努力。


问题就在于,老板要通过读、理解并对你所收集的所有文字有了一个概览之后,才能找到真正对他有用的信息;


你投入了大量的努力却没有得到老板的认可也许会让你有一丢丢的沮丧,不过,你可以换种报告形式!


你可以对内容进行划分,并对内容做一个目录,效果如下:



2017新车报告-2

然后,你把这份资料交给老板。你老板想寻找关于 Batmobile 的信息,根据目录,这些信息位于第三页,他将报告翻到第3页,它所看到的内容如下:



report-page3

老板简单快速的找到了他想要的信息!关于 Batmobile ,主要有3部分的内容 Description、Image、Color ;


几个月后,老板希望你再做一个报告,与上次的报告相比,每个类型的车的内容由3部分变为4部分。你只需要在上次报告的基础上,添加一点小修改 ,看起来如下图所示:



report-update

还是相似的布局,老板表示非常满意。


好了,因为这种内容呈现的格式非常有效,你将这种格式称为 JSON : 首先,有一个项目列表,说明文档主要描述的是什么项目,而每一个项目又分为小项目,每个小项目还可以划分为小小项目 ... ... ;这样,就能快速,高效的缩小查找范围,找到目标信息! JSON 也就变得流行起来,成为员工和老板之间交流的标准格式。


现在,回到真实世界,看看真实的JSON是怎么样的。计算机也需要对数据进行结构化的组织,才能快速正确的获取目标数据。


理解JSON


综合上述两个类比:我们有两个不同的部分,它们之间希望能够和对方进行通讯。它们有各自不同的语系,为了实现交流,它们将英语作为通用语,英语有自己对词汇的组织方式,这种组织方式就称为语法。有了标准语法之后,双方就可以进行正常交流了。


格式标准(即信息被组织的方式)被双方所接受,不管它们所使用的编程语言是什么,进行数据交换时,使用相同的格式,这就称为JSON。


JSON是一种 文本语法或者称为格式 ,用于数据在不同用编程语言之间的传递!


最后一个例子:PHP和JavaScript之间想向对方发送信息。理论上来说,它们能够发送一大堆无组织的文本,但是,为了能够 "读懂" 这一大堆文本,它们不得不附上说明手册来解释文本内容的含义,这样,PHP需要编写特定的代码来解析JavaScript发送来的数据,而JavaScript也一样要编写代码解析PHP的数据。


JSON提供了确定的组织方式,这种组织方式独立于语言,而且,由于JSON的流行,几乎所有的编程语言都有解释 JSON 的库,这样,不同编程语言只要调用现成的JSON库,就可以进行数据通讯了;


还有另外一种数据通讯的组织结构,称为 XML 。XML 有自己的一套规则,看起来与 HTML 类似;


JSON 和 XML 之间有什么不同呢?


其实,XML是另一种通用的 “语言” 而已,只不过语法不同罢了。有朝一日,我大中华的汉语成为了世界通用语言,英语相当于JSON,汉语就相当于XML;


关于 JSON 和 XML 格式的不同,来看两个图:



JSON语法

该图中,JSON语法有3层次的缩进,每个项目的子项目都要进行缩进一次;等价的 XML语法表示如下:



XML语法

XML 看起来没有 JSON 简单明了。

推荐阅读更多精彩内容