译自: https://twobithistory.org/2017/09/21/the-rise-and-rise-of-json.html

作者: Two-bit History

译者: runningwater

html5json解析JSON 的鼓起与突起 Python

JSON 已经盘踞了全天下。
当今,任何两个运用程序彼此通过互联网通信时,可以打赌它们在利用 JSON。
它已被所有大型企业所采取:十大最受欢迎的 web API 接口列表中(紧张由 Google、Facebook 和 Twitter 供应),仅仅只有一个 API 接口因此 XML 的格式开放数据的。
1 这个列表中的 Twitter API 为此做了一个鲜活的注脚:其对 XML 格式的支持到 2013 年结束,其时发布的新版本的 API 取消 XML 格式,转而仅利用 JSON。
JSON 也在程序编码级别和文件存储上被广泛采取:在 Stack Overflow(LCTT 译注:一个面向程序员的问答网站)上,现在更多的是关于 JSON 的问题,而不是其他的数据交流格式。
2

XML 仍旧在很多地方存在。
网络上它被用于 SVG 和 RSS / Atom 信息流。
Android 开拓者想要得到用户权限容许时,须要在其 APP 的 manifest 文件中声明 —— 此文件是 XML 格式的。
XML 的替代品也不仅仅只有 JSON,现在有很多人在利用 YAML 或 Google 的 Protocol Buffers 等技能,但这些技能的受欢迎程度远不如 JSON。
目前来看,JSON 是运用程序在网络之间通信的首选协议格式。

考虑到自 2005 年来 Web 编程天下就垂涎于 “异步 JavaScript 和 XML” 而非 “异步 JavaScript 和 JSON” 的技能潜力,你可以创造 JSON 的主导地位是如此的让人惊异。
当然了,这可能与这两种通信格式的受欢迎程度无关,而仅反响出缩写 “AJAX” 彷佛比 “AJAJ” 更具吸引力。
但是,纵然在 2005 年有些人(实际上没有太多人)已经用 JSON 来取代 XML 了,我们不禁要问 XML 的噩运来的如此之快,以至于短短十来年,“异步 JavaScript 和 XML” 这个名称就成为一个很讽刺的误称。
那这十来年发生了什么?JSON 怎么会在那么多运用程序中取代了 XML?现在被全天下工程师和系统所利用、依赖的这种数据格式是谁提出的?

JSON 之出身

2001 年 4 月,首个 JSON 格式的被发送出来。
此是从旧金山湾区某车库的一台打算机发出的,这是打算机历史上主要的的时候。
Douglas Crockford 和 Chip Morningstar 是一家名为 State Software 的技能咨询公司的联合创始人,他们当时聚拢在 Morningstar 的车库里测试某个想法,发出了此。

在 “AJAX” 这个术语被创造之前,Crockford 和 Morningstar 就已经在考试测验构建好用的 AJAX 运用程序了,可是浏览器对其兼容性不好。
他们想要在初始页面加载后就将数据通报给运用程序,但其目标要针对所有的浏览器,这就实现不了。

这在本日看来不太可信,但是要记得 2001 年的时候 Internet Explorer(IE)代表了网页浏览器的最前沿技能产品。
早在 1999 年的时候,Internet Explorer 5 就支持了原始形式的 XMLHttpRequest,开拓者可以利用名为 ActiveX 的框架来访问此工具。
Crockford 和 Morningstar 能够利用此技能(在 IE 中)来获取数据,但是在 Netscape 4 中(这是他们想要支持的另一种浏览器)就无法利用这种办理方案。
为此 Crockford 和 Morningstar 只得利用一套不同的系统以兼容不同的浏览器。

第一条 JSON 如下所示:

<html><head><script>

document.domain = 'fudco';

parent.session.receive(

{ to: \"大众session\"大众, do: \"大众test\"大众,

text: \"大众Hello world\"大众 }

)

</script></head></html>

中只有一小部分类似于本日我们所知的 JSON,本身实在是一个包含有一些 JavaScript 的 HTML 文档。
类似于 JSON 的部分只是通报给名为 receive() 的函数的 JavaScript 工具字面量。

Crockford 和 Morningstar 决定滥用 HTML 的帧(<frame>)以发送数据。
他们可以让一个帧指向一个返回的上述 HTML 文档的 URL。
当吸收到 HTML 时,JavaScript 代码段就会运行,就可以把数据工具字面量如实地通报回运用程序。
只要小心的回避浏览器保护策略(即子窗口不许可访问父窗口),这种技能就可以正常运行无误。
可以看到 Crockford 和 Mornginstar 通过明确地设置文档域这种方法来达到其目的。
(这种基于帧的技能,有时称为隐蔽帧技能,常日在 90 年代后期,即在广泛利用 XMLHttpRequest 技能之前利用。
3)

第一个 JSON 的惊人之处在于,它显然不是一种新的数据格式的首次利用。
它便是 JavaScript!
实际上,以此办法利用 JavaScript 的想法如此大略,Crockford 自己也说过他不是第一个这样做的人。
他说 Netscape 公司的某人早在 1996 年就利用 JavaScript 数组字面量来交流信息。
4 由于便是 JavaScript,其不须要任何分外解析事情,JavaScript 阐明器就可搞定统统。

最初的 JSON 信息实际上与 JavaScript 阐明器发生了冲突。
JavaScript 保留了大量的关键字(ECMAScript 6 版本就有 64 个保留字),Crockford 和 Morningstar 无意中在其 JSON 中利用了一个保留字。
他们利用了 do 作为了键名,但 do 是阐明器中的保留字。
由于 JavaScript 利用的保留字太多了,Crockford 做了决定:既然不可避免的要利用到这些保留字,那就哀求所有的 JSON 键名都加上引号。
被引起来的键名会被 JavaScript 阐明器识别成字符串,其意味着那些保留字也可以放心安全的利用。
这就为什么本日 JSON 键名都要用引号引起来的缘故原由。

Crockford 和 Morningstar 意识到这技能可以运用于各种运用系统。
想给其命名为 “JSML”,即JavaScript 标记措辞(JavaScript Markup Language)的意思,但创造这个缩写已经被一个名为 Java Speech 标记措辞的东西所利用了。
因此他们决定采取 “JavaScript Object Notation”,缩写为 JSON。
他们开始向客户推销,但很快创造客户不愿意冒险利用缺少官方规范的未知技能。
以是 Crockford 决定写一个规范。

2002 年,Crockford 买下了 JSON.org 域名,放上了 JSON 语法及一个阐明器的实例例子。
该网站仍旧在运行,现在已经包含有 2013 年正式批准的 JSON ECMA 标准的显著链接。
在该网站建立后,Crockford 并没有过多的推广,但很快创造很多人都在提交各种不同编程措辞的 JSON 解析器实现。
JSON 的血统显然与 JavaScript 干系联,但很明显 JSON 非常适宜于不同措辞之间的数据交流。

AJAX 导致的误会

2005 年,JSON 有了一次大爆发。
那一年,一位名叫 Jesse James Garrett 的网页设计师和开拓者在博客文章中创造了 “AJAX” 一词。
他很谨慎地强调:AJAX 并不是新技能,而是 “好几种发达发展的技能以某种强大的新办法搜集在一起。
5 ” AJAX 是 Garrett 给这种正受到青睐的 Web 运用程序的新开拓方法的命名。
他的博客文章接着描述了开拓职员如何利用 JavaScript 和 XMLHttpRequest 构建新型运用程序,这些运用程序比传统的网页更具相应性和状态性。
他还以 Gmail 和 Flickr 网站已经利用 AJAX 技能作为了例子。

当然了,“AJAX” 中的 “X” 代表 XML。
但在随后的问答帖子中,Garrett 指出,JSON 可以完备替代 XML。
他写道:“虽然 XML 是 AJAX 客户端进行数据输入、输出的最完善的技能,但要实现同样的效果,也可以利用像 JavaScript Object Notation(JSON)或任何类似的构造数据方法等技能。
” 6

开拓者确实创造在构建 AJAX 运用程序时可以很随意马虎的利用 JSON,许多人更喜好它而不是 XML。
具有讽刺意味的是,对 AJAX 的兴趣逐渐的导致了 JSON 的遍及。
大约在这个时候,JSON 引起了博客圈的把稳。

2006 年,Dave Winer,一位高产的博主,他也是许多基于 XML 的技能(如 RSS 和 XML-RPC)背后的开拓工程师,他抱怨到 JSON 毫无疑问的正在重新发明 XML。
只管人们认为数据交流格式之间的竞争不会导致某一技能的消亡。
其写到:

毫无疑问,我可以编写一个例程来解析 JSON,但来看看他们要重新发明一个东西有多大的意义,出于某种缘故原由 XML 本身对他们来说还不足好(我很想听听缘故原由)。
谁想干这荒谬之事?查找一棵树然后把节点串起来。
可以立马试试。
7

我很理解 Winer 的挫败感。
事实上并没有太多人喜好 XML。
乃至 Winer 也说过他不喜好 XML。
8 但 XML 已被设计成一个可供任何人利用,并且可以用于险些能想象到的所有事情。
归根到底,XML 实际上是一门元措辞,许可你为特定运用程序自定义该领域特定的措辞。
如 Web 信息流技能 RSS 和 SOAP(大略工具访问协议)便是例子。
Winer 认为由于通用交流格式所带来的好处,努力达成共识非常主要。
XML 的灵巧性该当能知足任何人的需求,然而 JSON 格式呢,其并没有比 XML 供应更多东西,除了它抛弃了使 XML 更灵巧的那些繁琐的东西。

Crockford 阅读了 Winer 的这篇文章并留下了评论。
为了回应 JSON 重新发明 XML 的责怪,Crockford 写到:“重造轮子的好处是可以得到一个更好的轮子。
” 9

JSON 与 XML 比拟

到 2014 年,JSON 已经由 ECMA 标准和 RFC 官方正式认可。
它有了自己的 MIME 类型。
JSON 已经进入了大同盟时期。

为什么 JSON 比 XML 更受欢迎?

在 JSON.org 网站上,Crockford 总结了一些 JSON 的上风。
他写到,JSON 的语法极少,其构造可预测,因此 JSON 更随意马虎被人类和机器理解。
10 其他博主一贯关注 XML 的冗长啰嗦及“尖括号包袱”。
11XML 中每个开始标记都必须与结束标记匹配,这意味着 XML 文档包含大量的冗余信息。
在未压缩时,XML 文档的体积比同等信息量 JSON 文档的体历年夜很多,但是,更主要的,这也使 XML 文档更难以阅读。

Crockford 还声称 JSON 的另一个巨大上风是其被设计为数据交流格式。
12 从一开始,它的目的便是在运用程序间通报构造化信息的。
而 XML 呢,虽然也可以利用来通报数据,但其最初被设计为文档标记措辞。
它演化自 SGML(通用标准标记措辞),而它又是从被称为 Scribe 的标记措辞演化而来,其旨在发展成类似于 LaTeX 一样的笔墨处理系统。
XML 中,一个标签可以包含有所谓的“稠浊内容”,即带有环绕单词、短语的内嵌标签的文本。
这会让人浮现出一副用红蓝条记载的手稿画面,这是标记措辞核心思想的形象比喻。
另一方面,JSON 不支持对稠浊内容模型的清晰构建,但这也意味着它的构造足够大略。
一份文档最好的建模便是一棵树,但 JSON 抛弃了这种文档的思想,Crockford 将 JSON 抽象限定为字典和数组,这是所有程序员构建程序时都会利用的最基本的、也最熟习的元素。

末了,我认为人们不喜好 XML 是由于它让人困惑。
它让人迷惑的地方便是有很多不同的风格。
乍一看,XML 本身及其子措辞(如 RSS、ATOM、SOAP 或 SVG)之间的界线并不明显。
范例的 XML 文档的第一行标识了该 XML 的版本,然后该 XML 文档该当符合特定的子措辞。
这就有变革须要考虑了,特殊是跟 JSON 做比较,JSON 是如此大略,以至于永久不须要编写新版本的 JSON 规范。
XML 的设计者试图将 XML 做为唯一的数据交流格式以支配所有格式,就会掉入那个经典的程序员陷阱:过度工程化。
XML 非常笼统及观点化,以是很难于大略的利用。

在 2000 年的时候,发起了一场使 HTML 符合 XML 标准的活动,发布了一份符合 XML 标准的 HTML 开拓规范,这就此后很出名的 XHTML。
虽然一些浏览器厂商立即开始支持这个新标准,但也很明显,大部分基于 HTML 技能的开拓者不愿意改变他们的习气。
新标准哀求对 XHTML 文档进行严格的验证,而不是基于 HTML 的基准。
但大多的网站都是依赖于 HTML 的宽容规则的。
到 2009 年的时候,试图编写第二版本的 XHTML 标准的努力已经流产,由于未来已清晰可见,HTML 将会发展为 HTML5(一种不逼迫哀求接管 XML 规则的标准)。

如果 XHTML 的努力取得了成功,那么 XML 可能会成为其设计者所希望的通用数据格式。
想象一下,一个 HTML 文档和 API 相应具有完备相同构造的天下。
在这样的天下中,JSON 可能不会像现在一样普遍存在。
但我把 HTML 的失落败看做是 XML 阵营的一种道义上的失落败。
如果 XML 不是 HTML 的最佳工具,那么对付其他运用程序,大概会有更好的工具涌现。
在这个天下,我们的天下,很随意马虎看到像 JSON 格式这样的足够大略、相机行事的才能得到更大的成功。

如果你喜好这博文,每两周会更新一次!
请在 Twitter 上关注 @TwoBitHistory 或订阅 RSS feed ,以确保得到更新的关照。

http://www.cs.tufts.edu/comp/150IDS/final_papers/tstras01.1/FinalReport/FinalReport.html#software ↩https://insights.stackoverflow.com/trends?tags=json%2Cxml%2Cprotocol-buffers%2Cyaml%2Ccsv ↩Zakas, Nicholas C., et al. “What Is Ajax?” Professional Ajax, 2nd ed., Wiley, 2007. ↩https://youtu.be/-C-JoyNuQJs?t=32s ↩http://adaptivepath.org/ideas/ajax-new-approach-web-applications/ ↩同上 ↩http://scripting.com/2006/12/20.html ↩http://blogoscoped.com/archive/2009-03-05-n15.html ↩https://scripting.wordpress.com/2006/12/20/scripting-news-for-12202006/#comment-26383 ↩http://www.json.org/xml.html ↩https://blog.codinghorror.com/xml-the-angle-bracket-tax ↩https://youtu.be/-C-JoyNuQJs?t=33m50sgg ↩

via: https://twobithistory.org/2017/09/21/the-rise-and-rise-of-json.html

作者: Two-Bit History 选题: lujun9972 译者: runningwater 校正: wxy

本文由 LCTT 原创编译, Linux中国 名誉推出

点击“理解更多”可访问文内链接