JSON和XML比较[关闭]


273

我想知道哪个更快:XML和JSON?什么时候使用哪一个?


60
哪里?传播?处理中?正在生成?你们俩都没有脚。JSON可能以某种方式“更快”,因为它的标记开销较小。另一方面,XML提供XMLSchema来确保类型,结构……如此有效。XSLT可以转换几乎任何其他输出格式的XML ...这取决于您的需求
菲利克斯·克林

2
还要检查其他先前询问的问题:stackoverflow.com/search?
Felix Kling

16
LAR!这是我真正想知道的事情,我很高兴它在这里,而且答案很完美。BAD ON YOU,SE主持人:也许是时候扩展您的参与莱利。至少允许您回答问题对您有好处!
Mark Gerolimatos '16

我不在乎这篇文章对游戏的影响是否太晚了,但我同意。如果问题是重复的,不相关的或与服务条款冲突的,那么(封闭/无用的线程)也许不应成为搜索中的第一件事。(顺便说一句,这是出现的第二个[duped]结果)我同意,答案应该简洁明了,但是如果结果后的结果是一个封闭的,未回答的话题,里面充满了非主题评论(违反了使用条款),那么它没有人帮助。
艾萨克·科贝特

2
尽管所提出的问题尚不清楚,但这不是基于观点的问题。
qwr

Answers:


221

在回答何时使用哪一个之前,有一点背景知识:

编辑:我应该提到,这种比较实际上是从在具有JavaScript的浏览器中使用它们的角度来看的。这也不数据格式的方法被使用,并且有很多很好的解析器,这将改变细节,使我在说什么不是很有效的。

JSON既更紧凑,又(在我看来)更易读-在传输中,它可以“更快”,因为传输的数据较少。

在解析中,它取决于您的解析器。解析器会将代码(无论是JSON还是XML)转换为数据结构(例如地图),都可能会受益于XML的严格特性(XML模式很好地消除了数据结构的歧义)-但是在JSON中,项目的类型(字符串/ Number / Nested JSON Object)可以从语法上进行推断,例如:

myJSON = {"age" : 12,
          "name" : "Danielle"}

解析器不需要足够的智能就可以意识到它12代表一个数字(和Danielle其他字符串一样)。因此,在javascript中,我们可以执行以下操作:

anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False

在XML中,我们必须执行以下操作:

<person>
    <age>12</age>
    <name>Danielle</name>
</person>

(顺便说一句,这说明了XML更加冗长;这是对数据传输的关注)。要使用这些数据,我们将通过解析器运行它,然后我们必须调用类似的代码:

myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True

实际上,一个好的解析器很可能会age为您键入(另一方面,您可能不希望输入)。当我们访问这些数据时,发生的是-而不是像上面的JSON示例中那样进行属性查找-我们正在对key进行映射查找name。这样形成XML可能更直观:

<person name="Danielle" age="12" />

但是我们仍然必须进行地图查找才能访问我们的数据:

myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");

编辑:原始:

在大多数编程语言中(无论如何,不​​是全部),这样的映射查找比属性查找(例如,我们在解析JSON时所获得的)要昂贵得多。

这具有误导性:请记住,在JavaScript(和其他动态语言)中,地图查找和字段查找之间没有区别。事实上,现场查找只是一个地图查找。

如果您想进行真正有价值的比较,最好是对其进行基准测试-在计划使用数据的环境中进行基准测试。

在我打字时,Felix Kling已经提出了一个相当简洁的答案,将它们在何时使用时进行了比较,因此我不再赘述。


只是一个有趣的注释... JavaScript字段查询不一定是地图查询。它取决于对象和相关领域。小对象(尤其是那些在构造后没有附加属性的对象)通常在现代JS引擎中使用带有内联缓存的优化“快速类型”,而对于具有大量属性或对象的对象,则使用较慢的属性包(地图查找)对象结构经常变化的情况。
布兰登·帕多克

2
我发现JSON对人类来说更容易解析,而XML对计算机而言更容易解析。
Jus12

5
并非如此,例如,在PHP中,JSON使用json.so在78k时没有依赖关系,另一方面,XML需要在54k / 32k时使用xml.so或xmlreader.so,但还需要1.4megs的libxml2.so 。更多的代码使处理和使用更多的内存花费的时间更长。更不用说,由于XML具有节点/树结构,因此它具有循环引用,这对于没有弱引用的任何语言来说都是一个痛苦。我发现几种语言的XML解析器都比其他任何JSON解析器大(占用更多内存并使用更多内存)。
拉希(Rahly)2015年

为什么将JS严格状态问题与此无关的比较混合?引用两个或三个等号。
atilkan

1
@atilkan,因为许多解析器将数字字符串解释为数字,或将数字存储为数字字符串。
mazunki

244

更快不是JSON或XML的属性,也不是两者之间进行比较的结果。如果有的话,则它是解析器的属性或用于传输数据的带宽。

这是(和开始)JSON和XML的优点和缺点的列表:


JSON格式

优点:

  • 简单的语法,与XML相比,可减少“标记”开销。
  • 易于使用JavaScript作为标记,它是JS对象文字符号的子集,并且具有与JavaScript相同的基本数据类型。
  • 用于描述以及数据类型和结构验证的JSON模式
  • JsonPath用于在深层嵌套的结构中提取信息

缺点:

  • 简单的语法,仅支持少数几种不同的数据类型。

  • 不支持评论。


XML格式

优点:

  • 通用标记;可以出于任何目的创建“方言”
  • 用于数据类型,结构验证的XML模式。也可以创建新的数据类型
  • XSLT转换为不同的输出格式
  • XPath / XQuery用于在深层嵌套的结构中提取信息
  • 内置对名称空间的支持

缺点:

  • 与JSON相比,相对而言比较罗((对于相同数量的信息,会产生更多数据)。

因此,最后您必须决定需要什么。显然,两种格式都有其合法的用例。如果您主要使用JavaScript,则应使用JSON。

请随时添加优点和缺点。我不是XML专家;)


20
JSON和Pro for XML的另一个缺点:JSON不支持对象引用(无论是否循环),XML则支持。XML通过强制id属性在文档中唯一来做到这一点。
Earth Engine

7
@EarthEngine实际上Json.Net(json.codeplex.com)确实支持对象引用:james.newtonking.com/projects/json/help/index.html?topic=html/…
Dmitrii Lobanov

22
@DmitryLobanov:他们只是在JSON标准上添加了一些其他限制,但其他JSON工具无法识别它。因此它不是JSON的“本机”。但是,对于XML,此限制是用标准编写的,因此它是本机的。
Earth Engine


5
JSON具有内置数组以及“ null”值。而在XML中,您需要在架构解析器中使用某种约定。还有XSLT样转化项目JSON(如github.com/emlynoregan/bOTLjs
瓦西利·Boroviak

22

处理速度可能不是唯一相关的问题,但是,这就是问题所在,这是基准测试中的一些数字:JSON vs. XML:有关冗长程度的一些硬数字。为了提高速度,在这个简单的基准测试中,XML的开销比JSON高21%。

关于冗长性的重要说明,正如文章中所说的,是最常见的抱怨:在实践中,它并不那么相关(XML和JSON数据通常不是由人来处理,而是由机器来处理),即使对于速度,则需要更多合理的时间来压缩。

同样,在此基准测试中,处理了大量数据,并且典型的Web应用程序不会传输如此大的数据块(高达90MB),并且压缩可能无益(对于足够小的数据块,压缩的块将大于未压缩的块),因此不适用。

尽管如此,如果不涉及压缩,那么JSON(显然会更麻烦)在传输通道上的权重会降低,尤其是通过WebSocket连接传输时,在这种情况下,经典的HTTP开销的缺乏可能使JSON的优势有所不同,甚至更多重大。

传输后,将消耗数据,这将计入整个处理时间。如果要传输足够大或足够复杂的数据,则缺少验证XML解析器自动检查的架构,可能需要对JSON数据进行更多检查;这些检查必须在JavaScript中执行,而这并不是特别快,因此在这种情况下,它可能会比XML产生额外的开销。

无论如何,只有测试才能为您的特定用例提供答案(如果速度确实是唯一的问题,而不是标准,安全性或完整性……)。

更新1:值得一提的是EXI,一种二进制XML格式,与使用Gzip相比,它提供的压缩成本更低,并且节省了解压缩压缩XML所需的处理。EXI代表XML,BSON代表JSON。在这里有一个快速的概述,并在空间和时间上都提到了效率:EXI:最后一个二进制标准?

更新2:还存在由W3C进行的二进制XML性能报告,因为效率,低内存和CPU占用空间也与XML领域有关:高效XML交换评估

更新2015-03-01

在这种情况下,值得注意的是,HTTP开销成为一个问题:IANA已将EXI编码(上述有效的二进制XML)注册为HTTP协议的内容编码(以及compressdeflategzip) 。这意味着EXI是一个选项,可以预期浏览器可能会与其他HTTP客户端一起理解。请参阅超文本传输​​协议参数(iana.org)


“从速度来看,在这个简单的基准测试中,XML的开销比JSON少21%”-JSON解析存在很大差异,具体取决于所使用的特定解析器。引用任何特定的解析器几乎毫无意义。与XML相同。
杰弗里·布拉特曼

17

我发现在数字市集上的这篇文章真的很有趣。引用Norm的报价:

关于JSON专家:

如果您只想传递原子值或原子值列表或哈希值,那么JSON具有XML的许多优点:它可以在Internet上直接使用,支持各种应用程序,编写程序来处理JSON容易,它具有很少的可选功能,清晰易读,设计简洁明了,易于创建JSON文档,并且使用Unicode。...

关于XML专家:

XML可以很好地处理非结构化数据的全部丰富性。我不担心XML的未来,即使Web API设计人员的欢呼庆祝它的消亡。

而且我忍不住要塞一个“我告诉过你!” 在我的桌子上走了。我很期待看到JSON人员在被要求开发更丰富的API时会做什么。当他们想交换结构较少的数据时,会否将其转换为JSON?我偶尔会提到JSON的架构语言,还会跟随其他语言吗?...

我个人同意Norm。我认为对XML的大多数攻击来自典型应用程序的Web开发人员,而不是集成开发人员。但这是我的意见!;)


说得好!如果80%的活跃开发人员是javascript小子,那么80%的人会说他们的观点是JSON更好。但是任何使用类型化语言的人都对JSON感到有些好笑。{ "foo": 42 }那是什么类型的物体?然后,要解决缺少类型的问题,将显示以下内容:{ "__type": "Bar", "foo": 42 }。相反,在XML中,类型可以表示元素名称:<Bar><foo>42</foo></Bar>。只有
Lisp

15

XHR经常使用XML(可扩展标记语言),因为这是一种标准的广播语言,任何编程语言都可以使用,并且同时支持服务器端和客户端,因此这是最灵活的解决方案。可以将XML分为更多部分,以便指定的组可以开发程序的一部分,而不会影响其他部分。XML格式也可以由XML DTD或XML Schema(XSL)确定,并可以进行测试。

JSON是一种数据交换格式,随着JavaScript应用程序可能的格式越来越流行。基本上,这是一个对象符号数组。JSON具有非常简单的语法,因此很容易学习。JavaScript也支持使用eval函数解析JSON 。另一方面,该eval函数具有负数。例如,该程序解析JSON的速度可能非常慢,并且由于安全性的原因,其eval风险可能很高。这并不意味着JSON不好,只是我们必须更加小心。

我的建议是,对于游戏等轻度数据交换的应用程序,应使用JSON。因为您不必真正关心数据处理,所以这非常简单且快速。

XML最适合大型网站,例如购物网站或类似的网站。XML可以更加安全和清晰。您可以创建基本的数据结构和架构以轻松测试更正并将其轻松分为几部分。

由于速度和安全性的原因,我建议您使用XML,但是对于轻量级的东西,建议您使用JSON。


我没有拒绝投票,但我很好奇您如何将JSON视为更重的负载或总体而言更慢的负载。可以应用GZip / Deflate。它的语法从本质上使它的字节数变小。JSON还可以将其架构定义为协定,并可以轻松地进行序列化。
安东尼·梅森

不需要评估JSON。
Yay295

7

JSON的重要事项是出于安全原因对数据传输进行加密。毫无疑问,JSON比XML快得多。我已经看到XML需要100毫秒,而JSON仅需要60毫秒。JSON数据易于操作。


5
我同意,JSON赢得了数据传输方面的胜利,但缺少元素的标记,验证和扩展。这就是为什么Google抓取sitemap.xml而不是sitemap.json的原因
切塔巴哈纳2015年

1
Sitemaps是在json流行之前定义的,所以这不是最好的例子。Sitemap也被视为服务器到服务器,其中XML比JSON更流行。(JSON的真正原因是流行,因为它很容易在JavaScript中使用。)
Matthew Whited

但Google AMP使用json而不是xml
Ashraf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.