深入了解 JSON 与 XML,第 1 部分:每个标准的历史

已发表: 2022-03-11
相关:深入了解 JSON 与 XML,第 2 部分:两者的优缺点

从桌面到 Web 和移动设备,我们今天使用的几乎所有计算机应用程序都依赖于两种主要消息标准之一:JSON 和 XML。 今天,JSON 是最广泛使用的格式,但它在过去五年内才超过 XML。 快速在线搜索“JSON 与 XML”将带来无数文章和博客文章,比较这两种标准,并逐渐扩大偏见,赞扬 JSON 的简单性并批评 XML 的冗长。 许多文章坚持认为 JSON 优于 XML,因为它具有简洁的语义,并且认为 XML 是过去低效且令人困惑的标准。 乍一看,JSON 似乎是最流行的——那么 JSON 是否比 XML 更好? “JSON 与 XML”之战表面上可能是 JSON,但在深度上,它的内容远不止表面上所见。

在本文的第 1 部分中,我们将:

  1. 仔细研究 Web 的历史,了解 XML 和 JSON 的最初用途。
  2. 考虑近年来软件趋势的演变,以确定 JSON 比 XML 更受欢迎的原因。

JSON 和 XML 的历史

为了揭示 JSON 比 XML 更受欢迎的原因,让我们探讨一下 Web 的历史以及它从 Web 1.0 到 Web 2.0 的演变如何影响开发趋势。

Web 1.0:HTML

1990 年代初是 Web 1.0 的黎明。 HTML 于 1991 年推出,并被大学、企业和政府组织广泛采用为网络语言。 HTML 来自 SGML,即“标准通用标记语言”,由 IBM 在 1970 年代发明。 除了大规模采用之外,HTML 还得到了大规模适应——嵌入了扩展以支持多媒体、动画、在线应用程序、电子商务等。 作为 SGML 的衍生物,HTML 缺乏严格的规范来限制公司自由扩展它以满足超出原始概念的要求。 网景和微软之间对最受欢迎的网络浏览器的竞争取得了迅速的进展,但也导致了标准的无情分裂。 激烈的竞争导致了“分歧灾难”,因为两家公司对 HTML 的增强导致浏览器支持自己独特的 HTML 版本。 由于开发人员努力为浏览器编写可互操作的代码,这种分歧灾难成为 Web 应用程序的一个巨大问题。

Web 1.1:XML + HTML = XHTML

在 1990 年代后期,包括 Jon Bosak、Tim Bray、James Clark 等在内的一群人提出了 XML:“可扩展标记语言”。 与 SGML 一样,XML 本身不是一种标记语言,而是一种用于定义标记语言的规范。 XML 是从 SGML 演变而来的——旨在提供一种定义和实施结构化内容的方法。 XML 语言被认为是“计算的圣杯” 1 ,它致力于“解决不同系统之间的通用数据交换问题”(Charles Goldfarb 博士) 2 。 为了取代 HTML 的持续碎片化,万维网委员会 (W3C) 的成立是为了促进业界在采用新的万维网标准方面的兼容性和协议。 3 W3C 着手将 HTML 重塑为 XML 应用程序,其结果是 XHTML。

XHTML 是一项引起人们对 XML 关注的重大举措,但它只是 XML 的一小部分。

XML 为业界提供了一种方法,可以通过严格的语义为任何应用程序指定自定义标记语言。 由于关键字是“严格语义”,XML 定义了一个标准,可以断言任何 XML 文档、任何 XML 子语言中数据的完整性。 对于开发与不同系统交互的分布式企业应用程序的软件公司来说,可以断言其数据完整性的标记语言非常重要。 通过使用 XML 定义结构化内容,公司利用该技术的特性与任何平台进行互操作,强制每个数据交换的数据完整性,并系统地降低其系统的软件风险。 对于行业而言,XML 提供了一种存储、通信和验证任何类型数据的技术,其形式是任何平台上的应用程序都可以轻松读取和处理。 对于 HTML,XML 承诺解决“分歧灾难”。

Java 和 .NET

在 2000 年代初期,Web 由两家公司管理:Sun 和 Microsoft。 当时,编程语言的格局严重偏向服务器端。 Web 应用程序的通用架构依赖于服务器在后端渲染 HTML 页面以交付给浏览器。 这种方法突出了后端技术,进而普及了领先的后端平台:Java 和 C#.NET。 由 Sun Microsystems 开发的 Java 引领了新一代的面向对象编程语言,该语言以其新颖的“一次编写,随处运行” 4方法解决了跨架构问题。 Microsoft 紧随其后的是 .NET、C# 和公共语言运行时 (CLR),并将 XML 视为解决数据互操作性难题的选择方法。 微软成为 XML 最伟大的倡导者,该公司选择 XML 作为其著名的 .NET 计划的一个组成部分。 被宣传为“XML Web 服务平台”, 5 .NET 应用程序被设计为使用 XML 与其他平台进行通信。 XML 被选为 Microsoft 的数据交换标准,并被集成到其旗舰服务器产品中,例如 SQL Server 和 Exchange。

Web 1.2:AJAX

将预渲染的 HTML 页面交付给浏览器是不可扩展的,Web 需要一个替代方案。 由于每个用户操作都需要从服务器加载一个新页面,随着越来越多的人膨胀网络,进程负载和带宽消耗成为一个问题。

Netscape 和 Microsoft 努力通过异步内容交付解决这个问题:ActiveX 和 JavaScript。 1998 年,Microsoft Outlook Web Access 团队开发了 ActiveX 6背后的概念,后来被 Mozilla、Safari、Opera 和其他浏览器用 JavaScript 实现为XMLHttpRequest对象。

AJAX 诞生于 Microsoft 的 ActiveX 和 Netscape 的 JavaScript。

术语 AJAX(“异步 JavaScript 和 XML”的缩写)代表了广泛的 Web 技术,可用于实现与后台服务器通信的 Web 应用程序,而无需重新加载页面。 在创造术语 AJAX 的文章中, 7 8 Jesse James Garrett 概述了主要概念:

  1. 用于演示的 HTML(或 XHTML)和 CSS。
  2. 用于动态显示数据并与之交互的文档对象模型 (DOM)。
  3. XML 用于数据交换,XSLT 用于数据操作。
  4. 用于异步通信的XMLHttpRequest对象。
  5. JavaScript 将这些技术结合在一起。

通过证明异步内容交付可以减少服务器负载并节省大量带宽,AJAX 改变了游戏规则。 将XMLHttpRequest引入浏览器允许开发人员在前端实现更复杂的逻辑。 谷歌在 2004 年和 2005 年通过 Gmail 和谷歌地图广泛部署了符合标准的跨浏览器AJAX。9而且,2004 年 10 月,Kayak.com 的公开测试版是 AJAX 的第一个大规模电子商务使用之一。 10

Web 2.0:单页应用程序

采用 AJAX 作为 Web 应用程序的可扩展架构导致了 Web 2.0 的出现:单页应用程序 (SPA)。 11 SPA 不会为每次用户交互重新加载整个页面,而是动态地重写浏览器中的当前页面。 除了显着减少服务器负载和带宽消耗外,SPA 方法还允许 Web 应用程序类似于桌面应用程序,因为在用户交互过程中提供了无缝和不间断的体验。

2002 年 4 月,Stuart Morris 在 slashdotslash.com 12上编写了首批 SPA 之一,同年晚些时候,Lucas Birdeau、Kevin Hakman、Michael Peachey 和 Evan Yeh 在美国专利 8,136,109 中描述了单页应用程序实现。 13该专利描述了使用 JavaScript 来显示用户界面、运行应用程序逻辑以及与 Web 服务器通信的 Web 浏览器。

Google 的 Gmail、Google 地图和 Kayak 的公开测试版开启了 Web 应用程序开发的新时代。 启用了 AJAX 的浏览器使开发人员能够为 Web 编写丰富的应用程序。 JavaScript 的简单语义使任何水平的程序员都可以进行应用程序开发。 进入软件开发的门槛大大降低,世界各地的个人开发人员开始贡献自己的库和框架。 流行的库,如 jQuery,规范了来自不同制造商的浏览器的 AJAX 行为,进一步推动了 AJAX 革命。

JSON 的兴起

2001 年 4 月,Douglas Crockford 和 Chip Morningstar 从晨星湾区车库的一台计算机发送了第一条 JSON 消息。 Crockford 和 Morningstar 早在“AJAX”一词被创造出来之前就试图构建 AJAX 应用程序,但浏览器对他们试图实现的目标的支持并不好。 他们希望在页面加载后将数据传递给他们的应用程序,但还没有找到一种方法来允许它在所有浏览器上工作。

2001 年,AJAX 的开发才刚刚开始,在 Internet Explorer 5 和 Netscape 4 中还没有XMLHttpRequest对象的可互操作形式。因此,Crockford 和 Morningstar 使用了在这两种浏览器中都可以工作的不同方法。

第一条 JSON 消息如下所示:

 <html><head><script> document.domain = 'fudco'; parent.session.receive( { to: "session," do: "test," text: "Hello world" } ) </script></head></html>

该消息实际上是一个包含一些 JavaScript 的 HTML 文档,并且只有一小部分消息类似于我们今天所知道的 JSON。 Crockford 和 Morningstar 能够通过将<iframe>指向一个 URL 来异步加载数据,该 URL 将返回一个类似于上面的 HTML 文档。 当收到响应时,HTML 中的 JavaScript 将运行,并且通过避开阻止子窗口访问父窗口的浏览器保护,将对象字面量传递回应用程序的主框架。 这种基于帧的技术,有时称为“隐藏帧技术”,在XMLHttpRequest广泛实现之前的 90 年代后期普遍使用。 14

这种方法吸引了开发人员,因为它提供了跨所有浏览器的互操作性。 由于消息只是 JavaScript,它不需要任何特殊的解析。 以这种方式使用 JavaScript 的想法非常简单,以至于 Crockford 自己说他不是第一个这样做的人——他声称早在 1996 年,Netscape 就有人使用 JavaScript 来传递信息。 15

Crockford 和 Morningstar 意识到他们有一些可以用于各种应用程序的东西。 他们将格式命名为 JSON,即“JavaScript Object Notation”的缩写。 他们开始向客户推销它,但很快发现许多人不愿意在缺乏官方规范的新技术上冒险。 所以克罗克福德决定写一个。 2002 年,Crockford 购买了 JSON.org 域名,并提供了 JSON 语法和解析器的参考实现。 该网站仍在运行,尽管它现在包含一个指向 2013 年批准的 JSON ECMA 标准的显着链接。 16建立该网站后,Crockford 没有做更多的推广 JSON,但很快发现人们提交了针对不同编程语言的 JSON 解析器实现。 JSON 的起源显然与 JavaScript 相关,但很明显 JSON 非常适合在任意语言之间交换数据。

AJAX 中的 JSON

2005 年,Jesse James Garrett 在一篇博文中创造了“AJAX”一词,他强调 AJAX 不是任何一种新技术,而是“几种技术,每一种都以自己的方式蓬勃发展,以强大的新方式结合在一起。” 16他的博客文章继续描述了开发人员如何利用 JavaScript 和XMLHttpRequest构建比典型网页更具响应性和状态的新型应用程序。 他指出 Gmail、Google Maps 和 Flickr 是使用 AJAX 技术的网站示例。 尽管“AJAX”中的“X”代表 XML,但 Garrett 指出 JSON 是一种完全可以接受的替代方案。 他写道:“XML 是最完善的将数据传入和传出 AJAX 客户端的方式,但没有理由不能使用 JavaScript 对象表示法或任何类似的结构化数据方式来实现相同的效果。” 17

JavaScript 和 JSON 明确地意味着在一起。 JSON 的语义直接映射到 JavaScript,使其成为该语言的本机数据交换格式。 开发人员很快发现 JSON 在 JavaScript 中更易于使用,许多人开始更喜欢它而不是 XML。

随着 JSON 引起了博客圈的注意,JSON 的扩散已经开始。

为什么 JSON 比 XML 更受欢迎

JSON 是 JavaScript 应用程序中数据的本机格式。 随着过去十年 JavaScript 的普及,创建的 JSON 消息比任何其他数据格式都多。 用 JavaScript 编写应用程序几乎要求使用 JSON 进行数据交换。 其他格式也是可能的,但它们比 JSON 需要更多的努力。 随着 JavaScript 在应用程序开发中越来越受欢迎,JSON 紧随其后,成为易于使用且原生集成的数据交换格式。

就博客圈而言,关于 JavaScript(以及 JSON)的文章、示例和教程比任何其他编程平台都多。

Web 的历史和演进路径在 JSON 的普及中发挥了重要作用。 根据 Stack Overflow 的说法,现在关于 JSON 的问题比其他数据交换格式要多。 18

替代文本

根据 Google 趋势,可以看到类似的配置文件比较了 JSON 和 XML 的搜索兴趣。 19

替代文本

JavaScript 的普及是否意味着 JSON 优于 XML?

开发人员社区坚持认为 JSON 比 XML 更受欢迎,因为它具有简洁的声明范围和简单的语义。 Douglas Crockford 本人在 JSON.org 上总结了 JSON 的一些优势:“JSON 对人类和机器来说都更容易理解,因为它的语法极少且结构可预测。” 20 XML 的其他批评者将注意力集中在 XML 作为“尖括号税”的冗长。 21 XML 格式要求每个开始标签与一个结束标签相匹配,从而产生冗余信息,在未压缩时可能使 XML 文档明显大于等效的 JSON 文档。 而且,也许更重要的是,开发人员说:“它还使 XML 文档更难阅读。” 22

JSON 由于其简单性和简洁的语义而广受赞誉,而 XML 由于其冗长且看似过于复杂而被标记为过去的过时标准。 在比较 JSON 和 XML 时,许多文章和博客文章提供了有限的视角,导致读者相信 JSON 是 XML 的替代品。 不是这种情况!

文章和博客文章提供的有限视角导致读者认为 XML 已经过时,许多人没有意识到可以帮助他们改进软件架构和适应变化以及系统地降低软件风险的强大功能。

JSON 比 XML 更受欢迎,因为 JavaScript 作为当今使用最广泛的语言占据主导地位。 随着 JavaScript 在过去十年中对软件趋势的影响,JSON 比任何其他数据交换格式继续受到越来越多的关注。 博客圈很快就会回应“JSON 比 XML 更好”,但大多数情况下,这些陈述是不合理的,或者是在语义和冗长方面进行了简单的比较。 那么任何一个标准都比另一个更好吗? 这个问题的答案只能来自对每个标准的更深入的评估。

结论

从 1990 年到今天,网络已经走过了漫长的道路。 网景和微软之间的浏览器之战导致了 HTML 的分歧灾难,需要一个解决方案来拯救网络。 XML 被发明为形式化 XHTML,并为整体计算提供了一个圣杯解决方案。 从后端服务器渲染完整的 HTML 页面到 AJAX 和 SPA,Web 架构和浏览器开发的趋势已将焦点转移到 JavaScript,从而将全球开发人员转向 JSON。

JSON 的流行程度与 JavaScript 的流行程度相关。 凭借其易用性和较短的学习曲线,JavaScript 带来了比任何其他语言都多的新开发人员来编写软件。 借助 JSON 与最流行的开发平台的原生集成,在 Stack Overflow 上提出的有关 JSON 的问题比任何其他数据交换格式都多也就不足为奇了。

随着近年来的软件趋势将更多的 JavaScript 开发人员带入该行业,JSON 获得了“最流行的数据交换格式”的称号。

从表面上看,“JSON 与 XML”之战是针对 JSON 进行的,但在深度上,这不仅仅是表面上看到的。

在本文的第 2 部分中,我们将仔细研究 JSON 和 XML 的技术优势和劣势,并评估每种标准对常见应用程序和企业的适用性。 仔细研究“数据交换”将揭示其对整个应用程序软件风险的影响的广度。 更深入地了解 JSON 和 XML 之间的根本差异将使开发人员能够更好地评估每个标准与其项目需求相关的软件风险——使开发人员能够构建更稳定、更能抵抗错误和未来的软件未知数。

顺便说一句,JSON 规范的一个有趣的怪癖是您不能将具有双向关系的 JavaScript 对象(其中子属性引用父属性)转换为 JSON。 这样做会导致Uncaught TypeError: Converting circular structure to JSON错误。 有关此限制的破解,请参阅JSON 中的双向关系支持

参考

1. 互联网:历史百科全书。 年表,第 3 卷,p。 130 (ABC-CLIO, 2005)

2. 元数据、语义和本体手册,p。 109(世界科学,2013 年 12 月)

3. WebDiy.org - 万维网联盟 (W3C) - 历史

4. “JavaSoft 发布 Java 1.0”(Sun Microsystems,1996 年 1 月)

5. 空间支持下一代互联网(David Engen,2002 年 1 月)

6. XMLHTTP 的故事(AlexHopmann.com,2007 年 1 月)

7. 开始 Ajax - 第 2 页(Wiley Publishing,2007 年 3 月)

8. Ajax:一种新的 Web 应用程序方法(Jesse James Garrett,2005 年 2 月)

9. 阿贾克斯简史(Aaron Swartz,2005 年 12 月)

10. “什么是 Kayak.com?” (企业背景资料,2008 年 10 月)

11. 内部浏览:扩展浏览导航范式(Netscape,2003 年 5 月)

12.“使用 DHTML 的自包含网站”(SlashDotSlash.com,2012 年 7 月)

13. 交付数据和格式化信息以允许客户端操作(美国专利局,2002 年 4 月)

14.“什么是阿贾克斯?” 专业阿贾克斯,第 2 版。 (威利,2007 年 3 月)

15. Douglas Crockford:JSON 传奇(Yahoo!,2009 年 7 月)

16. ECMA 标准 404(ECMA 国际,2017 年 12 月)

17. Ajax:一种新的 Web 应用程序方法(Jesse James Garrett,2005 年 2 月)

18. 堆栈溢出趋势(堆栈溢出,2009-2019)

19. 谷歌趋势(谷歌,2004-2019)

20. JSON:XML 的无脂肪替代方案(Crockford,2006 年)

21. XML:尖括号税(Coding Horror,2008 年 5 月)

22. Xml 糟透了(WikiWikiWeb,2016 年)