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

本文概述

  • JSON和XML的历史
  • 为什么JSON比XML更受欢迎
相关:深入了解JSON与XML, 第2部分:两者的优点和缺点
从台式机到Web和移动设备, 我们今天使用的几乎所有计算机应用程序都依赖于两个主要消息标准之一:JSON和XML。如今, JSON是使用最广泛的格式, 但在过去五年中仅超过了XML。在线快速搜索” JSON vs. XML” 将带来不计其数的文章和博客文章, 比较这两种标准, 并逐渐扩大了对JSON的简单性和批评XML的冗长性的偏见。许多文章坚持认为JSON由于其简洁的语义而优于XML, 而将XML视为过去效率低下且令人困惑的标准。乍一看, JSON似乎最流行-那么JSON是否比XML更好?从表面上看, ” JSON与XML” 之战可能是JSON, 但从深度上讲, 还不止于此。
在本文的第1部分中, 我们将:
  1. 仔细研究网络的历史, 以发现XML和JSON的初衷。
  2. 考虑近年来软件趋势的发展, 以确定JSON为什么比XML更流行。
JSON和XML的历史 为了揭示JSON超越XML的原因, 让我们探究网络的历史以及它从Web 1.0到Web 2.0的演变如何影响发展趋势。
Web 1.0:HTML
【深入了解JSON与XML,第1部分(每个标准的历史)】1990年代初是Web 1.0的曙光。 HTML于1991年引入, 并被大学, 企业和政府组织广泛地用作网络语言。 HTML来自SGML, 即1970年代由IBM发明的” 标准通用标记语言” 。除了被广泛采用之外, HTML还实现了大规模适应-嵌入了扩展以支持多媒体, 动画, 在线应用程序, 电子商务等。作为SGML的派生产品, HTML缺乏严格的规范来限制公司自由扩展它来满足超出原始概念的要求。 Netscape和Microsoft之间最流行的Web浏览器之争取得了迅速的进展, 但也导致了该标准的残酷分裂。激烈的竞争导致了” 分歧灾难” , 因为两家公司对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), 以促进行业之间的兼容性和协议, 以采纳采用万维网的新标准。3W3C着手将HTML重构为XML应用程序, 结果是XHTML。
XHTML是一个引起人们对XML的关注的重大计划, 但是它只是XML的一小部分。
XML为业界提供了一种使用严格的语义为任何应用程序指定自定义标记语言的方法。使用关键字” 严格语义” , XML定义了一个标准, 该标准可以断言任何XML子语言的任何XML文档中数据的完整性。对于开发与不同系统接口的分布式企业应用程序的软件公司而言, 一种可以断言其数据完整性的标记语言非常重要。通过使用XML定义结构化内容, 公司可以利用该技术的功能与任何平台进行互操作, 增强每个数据交换的数据完整性, 并系统地降低其系统的软件风险。对于业界来说, XML提供了一种存储, 通信和验证任何类型的数据的技术, 其格式使任何平台上的应用程序都可以轻松读取和处理。对于HTML, XML承诺解决” 发散灾难” 。
Java和.NET
在2000年代初期, 该网站由两家公司管理:Sun和Microsoft。当时, 编程语言的格局严重倾斜到服务器端。 Web应用程序的通用体系结构依赖于在后端呈现HTML页面的服务器以将其交付给浏览器。这种方法强调了后端技术, 这些技术又反过来使领先的后端平台:Java和C#.NET普及。由Sun Microsystems开发的Java领导了新一代的面向对象的编程语言, 该语言以其新颖的” 写到处运行” 4方法解决了跨体系结构问题。微软紧随.NET, C#和公共语言运行时(CLR)之后, 将目光投向XML作为解决数据互操作难题的选择方法。微软成为XML的最大倡导者, 该公司选择XML作为其杰出的.NET计划的组成部分。 5 .NET应用程序被设计为使用XML与其他平台进行通信, 因此被宣传为” XML Web服务平台” 。 XML被选为Microsoft的数据交换标准, 已被集成到其旗舰服务器产品中, 例如SQL Server和Exchange。
Web 1.2:AJAX
向浏览器提供预渲染的HTML页面是不可扩展的, 并且Web需要替代方法。随着每个用户操作都需要从服务器加载一个新页面, 随着越来越多的人涌入网络, 进程负载和带宽消耗成为一个问题。
Netscape和Microsoft致力于通过异步内容交付解决此问题:ActiveX和JavaScript。 1998年, Microsoft Outlook Web Access团队开发了ActiveX6的概念, 该概念后来由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使得开发人员可以在前端实现更复杂的逻辑。 Google于2004年通过Gmail和2005.9分别通过Gmail和2005.9广泛部署了符合标准的跨浏览器AJAX。2004年10月, Kayak.com的公开测试版成为AJAX最早的大规模电子商务用途之一。10
Web 2.0:单页应用程序
使用AJAX作为Web应用程序的可伸缩体系结构导致了Web 2.0的出现:单页应用程序(SPA)。11SPA无需在每次用户交互时重新加载整个页面, 而是在浏览器中动态重写当前页面。除了大大减少服务器负载和带宽消耗外, SPA方法还使Web应用程序与桌面应用程序相似, 这是由于用户交互过程中的无缝和不间断的体验。
2002年4月, 斯图尔特·莫里斯(Stuart Morris)在slashdotslash.com12上写下了首批SPA之一。浏览器使用JavaScript来显示用户界面, 运行应用程序逻辑并与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.14的广泛实现之前, 通常在90年代后期使用。
这种方法吸引了开发人员, 因为它提供了所有浏览器之间的互操作性。由于该消息只是JavaScript, 因此不需要任何特殊的解析。以这种方式使用JavaScript的想法是如此简单, 以至于Crockford本人并不是第一个这样做的人-他声称Netscape的某个人早在1996.15便开始使用JavaScript来交流信息。
Crockford和Morningstar意识到他们拥有可以用于各种应用程序的功能。他们将格式命名为JSON, 这是” JavaScript对象表示法” 的缩写。他们开始将其推销给客户, 但很快发现许多人不愿意冒险尝试缺乏官方规范的新颖技术。因此, 克罗克福德决定自己写一篇。在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 Object Notation之类的技术或任何类似的数据构造方法无法达到相同的效果。” 17
JavaScript和JSON无疑是在一起的。 JSON的语义直接映射到JavaScript, 使其成为该语言的本机数据交换格式。开发人员很快发现JSON在JavaScript中更易于使用, 许多人开始更喜欢XML。
随着JSON引起博客圈的注意, JSON的扩散已经开始。
为什么JSON比XML更受欢迎 JSON是JavaScript应用程序中数据的本机格式。随着JavaScript在最近十年的普及, 与其他任何数据格式相比, 创建的JSON消息更多。用JavaScript编写应用程序几乎要求将JSON用于数据交换。其他格式也是可能的, 但是与JSON相比, 它们需要更多的工作。随着JavaScript在应用程序开发中的普及, JSON紧随其后, 成为易于使用和本机集成的数据交换格式。
就Blogo而言, 与JavaScript(以及JSON)有关的文章, 示例和教程已超过其他任何编程平台。
Web的历史和演进路径在JSON的普及中起着重要作用。根据Stack Overflow的说法, 与其他数据交换格式相比, 现在有关JSON的问题更多(18)。
深入了解JSON与XML,第1部分(每个标准的历史)

文章图片
根据Google趋势, 可以看到一个相似的配置文件, 比较了JSON和XML的搜索兴趣。19
深入了解JSON与XML,第1部分(每个标准的历史)

文章图片
JavaScript的泛滥是否意味着JSON比XML更好?
开发者社区坚持认为, JSON具有简洁的声明性范围和简单的语义, 因此比XML更为流行。 Douglas Crockford本人在JSON.org上总结了JSON的一些优点:” 由于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年到今天, 网络已经走了很长一段路。 Netscape和Microsoft之间的浏览器之战导致了HTML的巨大灾难, 因此需要一种解决方案来保存Web。 XML的发明是XHTML的形式化, 并为整体计算提供了一个圣杯解决方案。从后端服务器渲染完整的HTML页面到AJAX和SPA, Web体系结构和浏览器开发的趋势已将注意力集中在JavaScript上, 从而使全世界的开发人员都转向JSON。
JSON的流行与JavaScript密切相关。凭借其易用性和较短的学习曲线, JavaScript带来了比任何其他语言都要多的新开发人员来编写软件。通过JSON与最流行的开发平台的本机集成, 与其他任何数据交换格式相比, 在Stack Overflow上对JSON提出的问题更多就不足为奇了。
近年来, 随着软件趋势将更多的JavaScript开发人员带入业界, JSON获得了” 最受欢迎的数据交换格式” 的称号。
从表面上看, ” JSON vs. XML” 之战在于JSON, 但从深度上讲, 还不止于此。
在本文的第2部分中, 我们将仔细研究JSON和XML的技术优缺点, 并评估每种标准对通用应用程序和企业的适用性。仔细研究” 数据交换” 将揭示其影响范围对整个应用程序的软件风险。更深入地了解JSON和XML之间的根本区别将使开发人员能够更好地评估与他们的项目要求相关的每个标准的软件风险, 从而使开发人员能够构建更稳定, 更能抵抗错误和未来的软件未知数。
顺便说一下, JSON规范的一个有趣的怪癖是, 你不能将具有双向关系的JavaScript对象转换为JSON, 其中双向关系(子属性是指父属性)。这样做将导致Uncaught TypeError:将圆形结构转换为JSON错误。有关此限制的技巧, 请参阅JSON中的双向关系支持。
参考文献
1.互联网:历史百科全书。年表, 第3卷, 第1页。 130(ABC-CLIO, 2005)
2.元数据, 语义学和本体论手册, 第2页。 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. Beginning Ajax-Page 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.” 什么是Ajax?” 专业版Ajax, 第二版。 (2007年3月, 威利)
15. Douglas Crockford:JSON Saga(雅虎, 2009年7月)
16. ECMA标准404(ECMA International, 2017年12月)
17. Ajax:Web应用程序的新方法(Jesse James Garrett, 2005年2月)
18.堆栈溢出趋势(堆栈溢出, 2009-2019年)
19. Google趋势(Google, 2004-2019年)
20. JSON:XML的无脂替代品(Crockford, 2006年)
21. XML:尖括号税(编码恐怖, 2008年5月)
22. Xml很烂(WikiWikiWeb, 2016)

    推荐阅读