作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
Seva是一位拥有20年行业经验的企业和创业老手, 加州大学伯克利分校EECS和MSE专业的毕业生.
From desktop to web and mobile, 我们今天使用的几乎所有计算机应用程序都依赖于两种主要消息标准之一:JSON和XML. 今天,JSON是最广泛使用的格式,但它在最近五年内才超过XML. A quick online search for “XML vs. JSON”将带来无数比较这两个标准的文章和博客文章, 并逐渐扩大了对JSON的简单性的赞扬和对XML冗长性的批评. 许多文章坚持认为JSON优于XML,因为它具有简洁的语义,并认为XML是过去低效且令人困惑的标准. 乍一看,JSON似乎是最流行的——所以JSON就是比XML好? The battle of “JSON vs. 从表面上看,XML“可能会变成JSON,但从深度上看,事情远不止这么简单.
In Part 1 of this article, we will:
揭示JSON比XML流行的原因, and the advantages of JSON over XML, 让我们来探索一下web的历史以及它是如何从web 1进化而来的.0 to Web 2.0 influenced trends in development.
The early 1990s was the dawn of Web 1.0. HTML于1991年推出,并被大学广泛采用, businesses, 和政府机构作为网络语言. HTML来自SGML,即IBM在20世纪70年代发明的“标准通用标记语言”. In addition to mass adoption, HTML saw mass adaptation-扩展被嵌入以支持多媒体、动画、在线应用程序、电子商务等. As a derivative of SGML, HTML缺乏严格的规范来限制公司自由扩展它以满足超出原始概念的需求. 网景(Netscape)和微软(Microsoft)对最流行网络浏览器的争夺取得了迅速进展, 但它也导致了标准的无情分裂. 激烈的竞争导致了“分歧灾难”,因为两家公司对HTML的扩展导致浏览器支持他们自己独特的HTML版本. 当开发人员努力为浏览器编写可互操作的代码时,这种分歧灾难成为web应用程序的一个巨大问题.
In the late 1990s, a group of people—including Jon Bosak, Tim Bray, James Clark和其他人提出了XML:“可扩展标记语言”.” Like SGML, XML is not itself a markup language, 而是标记语言定义的规范. XML是从sgml进化而来的,旨在提供一种定义的方法, and to enforce, structured content. 它被认为是“计算领域的圣杯”,1 XML语言致力于“解决不同系统之间通用数据交换的问题”(Dr . XML). Charles Goldfarb)2. 代替持续的HTML碎片化, 万维网委员会(W3C)的成立是为了促进业界在采用万维网新标准方面的兼容性和协议.3 W3C开始着手将HTML重塑为XML应用程序,结果就是XHTML.
XHTML是引起人们对XML关注的一个重大创举, 但这只是XML的一小部分.
XML为业界提供了一种指定的方法, with strict semantics, 任何应用程序的自定义标记语言. With the keyword being “strict semantics,XML定义了一种标准,可以断言任何XML文档中数据的完整性, of any XML sub-language. 对于开发分布式企业应用程序的软件公司,这些应用程序与不同的系统接口, 能够断言其数据完整性的标记语言非常重要. By defining structured content with XML, 公司利用该技术的特性与任何平台进行互操作, 强制每个数据交换的数据完整性, 系统地降低他们系统的软件风险. For the industry, XML provided a technology to store, communicate, and validate any kind of data, 以任何平台上的应用程序都可以轻松读取和处理的形式. 对于HTML, XML承诺解决“分歧灾难”.”
21世纪初,互联网由两家公司统治:Sun和微软. 当时,编程语言的格局严重地向服务器端倾斜. web应用程序的通用架构依赖于服务器在后端呈现HTML页面,并将其交付给浏览器. 这种方法突出了后端技术, 这反过来又普及了领先的后端平台:Java和c#.NET. Developed by Sun Microsystems, Java引领了新一代面向对象编程语言,它以其新颖的“一次编写,随处运行”解决了跨架构问题。4 approach. Microsoft followed with .NET, C#, 以及公共语言运行时(CLR),并将目光投向XML,将其作为解决数据互操作性难题的首选方法. Microsoft became XML’s greatest advocate, 该公司选择XML作为其重要的组成部分 .NET initiative. 作为“XML web服务的平台”,5 .NET applications 是为使用XML与其他平台通信而设计的吗. 被选为微软的数据交换标准, XML被集成到其旗舰服务器产品中, such as SQL Server and Exchange.
向浏览器交付预渲染的HTML页面是不可伸缩的, and the web needed an alternative. 每个用户操作都需要从服务器加载一个新的页面, 随着越来越多的人使用网络,进程负载和带宽消耗成为一个问题.
Netscape和Microsoft尝试用异步内容交付(ActiveX和JavaScript)来解决这个问题. 1998年,Microsoft Outlook Web Access团队开发了ActiveX背后的概念6,后来被Mozilla、Safari、Opera和其他浏览器用JavaScript实现 XMLHttpRequest
object.
AJAX诞生于微软的ActiveX和网景的JavaScript.
术语ajax——“异步JavaScript和XML”的缩写——代表了一系列广泛的web技术,这些技术可用于实现在后台与服务器通信的web应用程序,而无需重新加载页面. 在创造AJAX这个术语的文章中,7 8 Jesse James Garrett概述了主要概念:
XMLHttpRequest
object for asynchronous communication.异步内容交付被证明可以减少服务器负载并节省大量带宽, AJAX was a game changer. The introduction of XMLHttpRequest
浏览器允许开发人员在前端实现更复杂的逻辑. 谷歌进行了广泛的标准兼容部署, 2004年在Gmail和2005年在谷歌地图上使用了跨浏览器AJAX.9 And, in October 2004, Kayak.com的公开测试版是AJAX在电子商务中的首次大规模应用.10
采用AJAX作为web应用程序的可伸缩架构导致了web 2的诞生.0: the Single-page Application (SPA).11 而不是为每个用户交互重新加载整个页面, spa在浏览器中动态重写当前页面. 此外,还可以大大减少服务器负载和带宽消耗, 由于用户交互过程中的无缝和不间断体验,SPA方法允许web应用程序类似于桌面应用程序.
2002年4月,Stuart Morris在slashdotslash上写了最早的spa之一.com12, and later the same year, Lucas Birdeau, Kevin Hakman, Michael Peachey, Evan Yeh在美国专利8中描述了一个单页应用程序的实现,136,109.13 该专利描述了使用JavaScript来显示用户界面的web浏览器, run application logic, and communicate with a web server.
Google’s Gmail, Google Maps, Kayak的公测版开启了web应用开发的新时代. 启用了AJAX的浏览器使开发人员能够编写 rich applications for the web. JavaScript的简单语义使得任何水平的程序员都可以开发应用程序. 进入软件开发的门槛大大降低了, 世界各地的个人开发人员开始贡献他们自己的库和框架. Popular libraries like jQuery, 哪些规范了不同厂商的浏览器之间的AJAX行为, further progressed the AJAX revolution.
In April 2001, 道格拉斯·克罗克福德(Douglas Crockford)和奇普·晨星(Chip Morningstar)在晨星位于湾区车库的一台电脑上发送了第一条JSON消息. Crockford和Morningstar早在“AJAX”这个术语出现之前就在尝试构建AJAX应用程序, 但是浏览器对他们试图实现的目标的支持并不好. 他们希望在页面加载后将数据传递给应用程序, 但还没有找到一种方法来允许它在所有浏览器上工作.
In 2001, the development of AJAX was just starting, 那时还没有一个可互操作的 XMLHttpRequest
对象在Internet Explorer 5和Netscape 4中. 因此,Crockford和Morningstar使用了一种不同的方法,在两种浏览器中都有效.
The first JSON message looked like this:
该消息实际上是一个包含一些JavaScript的HTML文档, 而且只有一小部分信息类似于我们今天所知道的JSON. Crockford和Morningstar能够通过指向 转换为一个URL,该URL将返回一个类似于上面的HTML文档. When the response was received, the JavaScript in the HTML would be run, 通过避开浏览器保护,防止子窗口访问父窗口, 对象字面量被传递回应用程序的主框架. This frame-based technique, 有时被称为“隐帧技术”,在广泛实施之前的90年代末被普遍使用
XMLHttpRequest
.14
这种方法对开发人员很有吸引力,因为它提供了跨所有浏览器的互操作性. 由于消息只是JavaScript,因此不需要任何特殊的解析. 以这种方式使用JavaScript的想法是如此直接,以至于Crockford自己说他不是第一个这样做的人——他声称早在1996年网景公司就有人使用JavaScript来交流信息.15
克罗克福德和晨星公司意识到他们有一些东西可以用于各种各样的应用程序. 他们将这种格式命名为JSON,即完整的“JavaScript对象表示法”.他们开始向客户推销这种技术,但很快就发现很多人不愿意冒险使用一种缺乏官方规范的新技术. So Crockford decided he would write one. 2002年,Crockford买下了JSON域名.org并提供JSON语法和解析器的参考实现. The website is still up, 尽管它现在包含了一个与2013年批准的JSON ECMA标准的显著链接.16 After putting up the website, Crockford没有进一步推广JSON,但很快发现人们提交了针对不同编程语言的JSON解析器实现. JSON的起源显然与JavaScript有关, 但很明显,JSON非常适合在任意语言之间交换数据.
In 2005, Jesse James Garrett在一篇博客文章中创造了“AJAX”这个术语, 他强调AJAX不是一种新技术,而是“几种技术”, each flourishing in its own right, coming together in powerful new ways.”16 他的博客文章继续描述了开发人员如何利用JavaScript和 XMLHttpRequest
构建新型的应用程序,这些应用程序比典型的网页响应更快,状态更好. 他指出,Gmail、谷歌地图和Flickr都是使用AJAX技术的网站. 虽然“AJAX”中的“X”代表XML,但Garrett指出JSON是完全可以接受的替代方案. 他写道:“XML是在AJAX客户机中进出数据的最成熟的方法, 但是没有理由不能使用JavaScript Object Notation之类的技术或任何类似的结构化数据的方法来实现相同的效果.”17
JavaScript和JSON显然是要结合在一起的. JSON的语义直接映射到JavaScript, 使其成为该语言的本地数据交换格式. 开发人员很快发现JSON在JavaScript中更容易使用, and many came to prefer it to XML.
随着JSON引起博客圈的注意,JSON的扩散开始了.
But why use JSON over XML? JSON是JavaScript应用程序中数据的原生格式. 随着JavaScript在过去十年的普及, 创建的JSON消息比任何其他数据格式都多. 用JavaScript编写应用程序几乎要求使用JSON进行数据交换. 其他格式也是可能的,但是它们比JSON需要更多的努力. 随着JavaScript在应用程序开发中的普及, JSON紧随其后,成为易于使用和本地集成的数据交换格式.
As far as the blogosphere is concerned, more articles, samples, 关于JavaScript(以及JSON)的教程比其他任何编程平台都多.
web的历史和进化路径对JSON的普及起到了重要的作用. According to Stack Overflow, 现在关于JSON的问题比关于其他数据交换格式的问题更多.18
根据Google Trends, JSON和XML的搜索兴趣也有类似的对比.19
JavaScript的普及是否意味着JSON比XML更好?
开发人员社区坚持认为JSON比XML更受欢迎,因为它具有简洁的声明性作用域和简单的语义. Douglas Crockford自己总结了JSON在JSON上的一些优势.org:“JSON对人类和机器来说都更容易理解, 因为它的语法是最小的,它的结构是可预测的.”20 其他批评XML的人把重点放在XML的冗长上,称之为“尖括号税”.”21 XML格式要求每个开始标记与结束标记匹配, 导致冗余信息,使XML文档在未压缩时明显大于等效的JSON文档. 而且,也许更重要的是,开发人员说:“它还使XML文档更难阅读.”22
JSON因其简单性和简洁的语义而备受赞誉, 而XML由于其冗长和似乎过于复杂而被标记为过时的标准. 许多文章和博客文章在比较JSON和XML时提供了有限的视角, 让读者相信JSON是XML的替代品. This is not the case!
文章和博客文章提供的有限视角导致读者认为XML已经过时, 让许多人意识不到强大的特性,这些特性可以帮助他们改进软件的架构和对变化的弹性,并系统地降低软件风险.
JSON是XML的轻量级替代品,它比XML更受欢迎,因为JavaScript是当今使用最广泛的语言. 随着JavaScript在过去十年的软件趋势的影响, JSON比其他任何数据交换格式都受到越来越多的关注. 博客圈迅速回应说“JSON比XML好”,” but most often than not, these statements are left unjustified, 或者在语义和冗长性方面进行简单的比较. 所以哪个标准比另一个好? 这个问题的答案只能来自对每个标准的更深入的评估.
从1990年到今天,网络已经走过了漫长的道路. 网景和微软之间的浏览器大战导致了HTML的分化灾难, 我们需要一个解决方案来拯救网络. XML的发明是对XHTML的形式化,并为整体计算提供了一个圣杯式的解决方案. 从后端服务器呈现完整的HTML页面到AJAX和spa, web架构和浏览器开发的趋势使JavaScript成为人们关注的焦点, 引导全世界的开发人员使用JSON.
JSON的流行与JavaScript相关. 它易于使用,学习曲线短, JavaScript比其他任何语言都吸引了更多的新开发人员来编写软件. JSON与最流行的开发平台的本地集成, 在Stack Overflow上,关于JSON的问题比任何其他数据交换格式都要多,这并不奇怪.
随着近年来软件的发展趋势,越来越多的JavaScript开发人员进入了这个行业, JSON已经获得了“最流行的数据交换格式”的称号."
On the surface, the battle of “JSON vs. “XML”变成了JSON,但在深度上,还有比表面看到的更多的东西.
In Part 2 of this article, 我们将进一步研究JSON和XML的技术优势和劣势, 并评估每个标准对通用应用程序和企业的适用性. 仔细观察“数据交换”将揭示其对整个应用程序的软件风险的影响的广度. 更深入地了解JSON和XML之间的基本差异,将使开发人员能够根据项目需求更好地评估每种标准的软件风险,从而使开发人员能够构建更稳定的软件, 并且更能抵抗错误和未来的未知.
By the way, JSON规范的一个有趣的怪癖是不能用双向关系转换JavaScript对象, 子属性指的是父属性, into JSON. Doing so would result in an 未捕获的类型错误:将循环结构转换为JSON
error. For a hack around this limitation see JSON中的双向关系支持.
1. The Internet: A Historical Encyclopedia. Chronology, Volume 3, p. 130 (ABC-CLIO, 2005)
2. 元数据、语义和本体手册, p. 109 (World Scientific, December 2013)
4. "JavaSoft ships Java 1.0" (Sun Microsystems, January 1996)
5. 在空间上实现下一代互联网 (David Engen, January 2002)
6. The story of XMLHTTP (AlexHopmann.com, January 2007)
7. Beginning Ajax - Page 2 (Wiley Publishing, March 2007)
8. Ajax: A New Approach to Web Applications (Jesse James Garrett, February 2005)
9. A Brief History of Ajax (Aaron Swartz, December 2005)
10. "What is Kayak.com?" (Corporate Backgrounder, October 2008)
11. 内部浏览:扩展浏览导航范例 (Netscape, May 2003)
12. "A self contained website using DHTML" (SlashDotSlash.com, July 2012)
13. 交付数据和格式化信息以允许客户端操作 (US Patent Bureau, April 2002)
14. "What Is Ajax?" Professional Ajax, 2nd ed. (Wiley, March 2007)
15. Douglas Crockford: The JSON Saga (Yahoo!, July 2009)
16. ECMA Standard 404 (ECMA International, December 2017)
17. Ajax: A New Approach to Web Applications (Jesse James Garrett, February 2005)
18. Stack Overflow Trends (Stack Overflow, 2009-2019)
19. Google Trends (Google, 2004-2019)
20. JSON: The Fat-Free Alternative to XML (Crockford, 2006)
21. XML: The Angle Bracket Tax (Coding Horror, May 2008)
JSON比XML简单,但XML更强大. 对于普通应用程序,JSON的简洁语义使代码更容易理解. 对于具有复杂数据交换需求的应用程序, such as in enterprise, XML的强大特性可以显著降低软件风险.
JSON是一种数据交换格式,只提供数据编码规范. XML是一种指定自定义标记语言的语言,它提供的功能远不止数据交换. With its strict semantics, XML定义了一个标准来断言XML文档的数据完整性, of any XML sub-language.
JSON is best for simple applications, 开发用于满足围绕数据交换的简单需求. XML最适合具有复杂数据交换需求的应用程序, such as in enterprise.
JSON和XML都不比另一种更安全. 对于这两个标准,安全性都是在消息层之上的逻辑层中实现的.
JSON更快,因为它是专门为数据交换而设计的. JSON编码很简洁,传输所需的字节更少. JSON解析器不那么复杂,需要较少的处理时间和内存开销. XML比较慢,因为它不仅仅是为数据交换而设计的.
World-class articles, delivered weekly.
World-class articles, delivered weekly.
Join the Toptal® community.