JSON和XML比较

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

在回答何时使用哪一个,一点背景:

编辑:我应该提到,这个比较真的是从在JavaScript浏览器中使用它们的angular度来看。 这不是要么使用数据格式的方式,有很多好的parsing器会改变细节,使我所说的不完全有效。

JSON更加紧凑,并且(在我看来)更具可读性 – 在传输过程中,它可以“更快”,只是因为传输的数据更less。

在parsing中,这取决于你的parsing器。 一个将代码(不pipe是JSON还是XML)转换成数据结构(如地图)的parsing器可能受益于XML的严格性质( XML Schemas可以很好地消除数据结构的歧义),但是在JSON中,项目的types(String /数字/嵌套JSON对象)可以在语法上推断,例如:

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

parsing器不需要足够聪明就可以实现12代表一个数字(而且Danielle是一个像其他任何string一样的string)。 所以在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是比较冗长的一点,这是数据传输的一个问题)。 为了使用这些数据,我们通过parsing器来运行它,然后我们必须调用如下所示:

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

实际上,一个好的parsing器可能会为你inputage (另一方面,你可能不希望这样做)。 当我们访问这些数据时发生了什么 – 而不是像上面的JSON例子那样做一个属性查找 – 我们正在对键name进行映射查找。 像这样形成XML可能更直观:

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

但是我们仍然需要进行地图查询来访问我们的数据:

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

编辑:原文:

在大多数编程语言中(不是全部),像这样的地图查找将比属性查找更昂贵(就像我们在parsingJSON的时候得到的那样)。

这是误导:请记住,在JavaScript(和其他dynamic语言)中,地图查找和字段查找没有区别 。 实际上,字段查找只是一个地图查询。

如果您想要进行真正有价值的比较,最好的方法就是对其进行基准testing – 在计划使用数据的环境中进行基准testing。

正如我一直在打字,菲利克斯·克林已经提出了一个相当简洁的答案比较他们什么时候使用每一个,所以我不会继续下去。

更快速并不是JSON或XML的属性,或者是它们之间的比较会产生的结果。 如果有的话,那么它是parsing器的一个属性或者你传输数据的带宽。

以下是JSON和XML的优缺点列表(开头):


JSON

优点:

  • 简单的语法,与XML相比,导致更less的“标记”开销。
  • 由于标记是JS对象文字符号的一个子集,并且与JavaScript具有相同的基本数据types,因此易于在JavaScript中使用。
  • JSON模式描述和数据types和结构validation
  • JsonPath用于提取深层嵌套结构中的信息

缺点:

  • 简单的语法,只支持less数不同的数据types。

XML

优点:

  • 广义标记; 可以为任何目的创build“方言”
  • 用于数据types的XML模式 ,结构validation。 使它也可以创build新的数据types
  • XSLT转换成不同的输出格式
  • XPath / XQuery用于在深度嵌套结构中提取信息
  • build立在对命名空间的支持

缺点:

  • 与JSON相比,相对罗嗦(导致更多的数据为相同数量的信息)。

所以最后你必须决定你需要什么。 显然这两种格式都有其合法的用例。 如果你主要使用JavaScript,那么你应该使用JSON。

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

处理速度可能不是唯一的相关问题,但是,因为这是一个问题,下面是基准中的一些数字: JSON与XML:一些关于冗长的硬数字 。 对于速度来说,在这个简单的基准testing中,XML比JSON提供了21%的开销。

关于冗长的一个重要说明,正如文章所说,最常见的抱怨是:这在实践中没有太多相关性(XML和JSON数据都不是由人类来处理,而是由机器来处理),即使对于速度,这需要一些合理的更多时间来压缩。

另外,在这个基准testing中,处理了大量的数据,一个典型的Web应用程序不会传输大小为90MB的数据块,而压缩可能不是有利的(对于足够小的数据块,压缩的块会比未压缩的块大),所以不适用。

尽pipe如此,如果不涉及压缩,那么JSON明显地比较传统,在传输通道上的权重会更小,特别是通过WebSocket连接传输的时候,传统HTTP开销的缺失可能会导致JSON的优势,甚至更多重大。

传输之后,数据将被消耗,并且在整个处理时间中计数。 如果要传输足够大或复杂的数据,缺less通过validationXMLparsing器自动检查的模式,则可能需要对JSON数据进行更多检查; 这些检查将不得不在JavaScript中执行,JavaScript并不是特别快,因此在这种情况下可能会带来额外的XML开销。

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

更新1:值得一提的是EXI,即二进制XML格式,它提供比使用Gzip更低的压缩,并且保存处理,否则需要解压缩压缩的XML。 EXI是XML,JSON是什么BSON。 在这里有一个快速的概述,并提及时间和空间的效率: EXI:最后一个二进制标准? 。

更新2:还存在由W3C进行的二进制XML性能报告,作为高效率,低内存和CPU占用空间,也是XML领域的一个问题: 高效的XML交换评估 。

更新2015-03-01

在这种情况下值得注意的是,由于HTTP开销引发了一个问题:IANA已经注册了EXI编码(上面提到的有效的二进制XML),作为HTTP协议的内容编码压缩缩小gzip ) 。 这意味着EXI是可能被其他HTTP客户端浏览器理解的选项。 请参阅超文本传输​​协议参数(iana.org) 。

XML(可扩展标记语言)经常被用于XHR,因为这是一种标准的广播语言,可以被任何编程语言使用,并且支持服务器和客户端,所以这是最灵活的解决scheme。 XML可以分开更多的部分,所以指定的组可以开发程序的一部分,而不影响其他部分。 XML格式也可以通过XML DTD或XML Schema(XSL)来确定,并且可以进行testing。

JSON是一种数据交换格式,作为JavaScript应用程序可能的格式越来越受欢迎。 基本上这是一个对象符号数组。 JSON有一个非常简单的语法,所以可以很容易地学习。 而且JavaScript支持使用eval函数parsingJSON。 另一方面, eval函数已经得到了否定。 例如,该程序可以非常缓慢地parsingJSON,并且由于安全性, eval可能是非常危险的。 这并不意味着JSON不好,只是我们必须更加小心。

我的build议是,你应该使用JSON来处理轻量级数据交换的应用,比如游戏。 因为你不必真的关心数据处理,所以这非常简单和快速。

XML最适合大型网站,例如购物网站或类似的东西。 XML可以更安全和清晰。 您可以创build基本的数据结构和模式,以轻松testing更正并将其分离为多个部分。

我build议你使用XML,因为速度和安全性,但JSON的轻量级的东西。

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

关于JSON优点:

如果你想要传递的是primefaces值或者primefaces值列表或哈希,JSON具有许多XML的优点:它可以直接在Internet上使用,支持各种应用程序,编写程序来处理JSON,它具有可选的特点,人性化,合理清晰,deviseforms简洁,JSON文档易于创build,使用Unicode。 …

关于XML优点:

XML非结构化数据的丰富性非常好。 我并不担心XML的未来,即使它的死亡是由一群Web APIdevise师高兴地庆祝的。

我无法抗拒“我已经告诉过你了!” 令牌在我的桌子。 我期待看到当JSON人们被要求开发更丰富的API时,他们会做些什么。 当他们想交换不太好的结构化数据时,他们会把它变成JSON吗? 我偶尔会看到JSON的模式语言,其他语言会跟着吗? …

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

JSON的重要之处在于保证数据传输的安全性。 毫无疑问,JSON要比XML快得多。 我已经看到XML需要100ms,因为JSON只需要60ms。 JSON数据很容易操纵。