JSON——JavaScript Object Notation,直译过来就是JavaScript对象标记法。
这是一种数据交换格式,简单来说,就像我们平时写收发地址一样,规定了一种大家都认同的格式,让数据在不同的系统之间传递得既安全又不会走丢。
首先,我们得聊聊历史,回到2000年左右,那时候互联网可比现在简单多了。
大家还在用XML作为标准的数据交换格式,XML——可扩展标记语言,它是标准通用标记语言的子集,XML的设计目的是传输和存储数据,它自身不做任何操作。
但是,XML太繁琐了,写起来一大堆标签,读起来也不方便,尤其是在网络传输上,特别占带宽。
这时,Douglas Crockford 站了出来,他提出了JSON,这一点灵感其实是来自于JavaScript语言中对象字面量的表示方法,你可以把它想象成一个轻量级的XML。
为什么说它轻量级呢?因为JSON的结构清晰,读写都很方便,对计算机来说也容易解析和生成,而且它的体积小,特别适合网络传输。
然后再来说说JSON为何要用双引号包裹属性名,这事儿得理清楚,简单地说,Douglas Crockford 在制定JSON标准时,是基于几个核心考虑的:
1. 历史原因和编码习惯
当时的JavaScript在对象字面量中是允许不用引号的,但是这样会带来一些问题,比如,如果你的属性名刚好是个JavaScript的保留字,那不加引号可能就会出错。
想想看,如果你有个属性叫class
或者function
,在JavaScript中这些都是特殊的词,有它们自己的意义,不可能随便用来当作别的东西的名字。
这时候,如果你不给class
或function
这样的属性名加引号,程序就会一头雾水,不知道你是在定义一个新东西,还是在用它原来的意思。
所以,为了避免混淆,JSON格式规定所有属性名都得加上双引号,这样就不会有歧义了。
这也是为什么在JSON里,即使你的属性名不是保留字,也得乖乖地加上双引号。
2. 兼容性
JSON虽然源自JavaScript,但它是被设计成一种跨语言的数据格式。
这就意味着,不只是JavaScript,其他许多语言,比如Python、Ruby、Java,都得能读懂并处理JSON。
如果属性名有时候加引号有时候不加,那各种语言的解析器就得不停地猜测这个属性名到底是什么意思。
这就像你在不同的国家之间寄信,但是收发地址格式不统一,那邮差怎么可能不迷路呢?
所以,Douglas Crockford 决定让所有语言在解析JSON时都能有一个清晰、统一的标准:所有属性名都用双引号括起来,这样无论你用什么语言,解析JSON都是一样的流程。
3. 效率
现在来看看效率问题,计算机处理数据时,如果格式统一,它就能更快地识别和处理这些数据。
就像快递分拣,如果所有包裹的大小形状都一样,那分拣起来就比较方便和快速。
同理,在JSON中,如果所有属性名都用同样的方式标记——也就是双引号——计算机解析起来就容易多了。
它不需要去考虑各种复杂的情况,只要看到双引号就知道:“嘿,一个新属性来了!”这种明确的标记,大大加快了解析的速度。
4. 扩展性和未来兼容性
最后,来聊聊扩展性,在JSON中,属性名用双引号括起来,意味着你的属性名可以是任何字符,不管是空格,特殊符号,还是东方文字,都没问题。
这让JSON变得非常灵活,无论你的数据长什么样,都能用JSON来表示。
而且,这样的设计也意味着未来即使出现了新的需求或者新的编程语言,JSON也能够适应,因为它的格式已经足够通用了。
总结
所以,总结一下,Douglas Crockford 在设计JSON时,考虑了很多的因素。需要确保这种格式既要简单明了,又要能跟得上未来的发展。
现在回头看看,这样的设计确实是充满了远见。如今,JSON已经成为了互联网中数据交换的标准之一,无论是在配置文件、API交互,还是在各种应用程序中,你都能看到JSON的身影。
求一键三连:点赞、分享、收藏
创作不易,点赞对我真的非常重要!在线求赞,加个关注我会非常感激!@小郑说编程