我想知道哪个更快:XML和JSON?什么时候使用哪一个?
我想知道哪个更快:XML和JSON?什么时候使用哪一个?
Answers:
在回答何时使用哪一个之前,有一点背景知识:
编辑:我应该提到,这种比较实际上是从在具有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已经提出了一个相当简洁的答案,将它们在何时使用时进行了比较,因此我不再赘述。
更快不是JSON或XML的属性,也不是两者之间进行比较的结果。如果有的话,则它是解析器的属性或用于传输数据的带宽。
这是(和开始)JSON和XML的优点和缺点的列表:
优点:
缺点:
简单的语法,仅支持少数几种不同的数据类型。
不支持评论。
优点:
缺点:
因此,最后您必须决定需要什么。显然,两种格式都有其合法的用例。如果您主要使用JavaScript,则应使用JSON。
请随时添加优点和缺点。我不是XML专家;)
id
属性在文档中唯一来做到这一点。
处理速度可能不是唯一相关的问题,但是,这就是问题所在,这是基准测试中的一些数字: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交换评估。
在这种情况下,值得注意的是,HTTP开销成为一个问题:IANA已将EXI编码(上述有效的二进制XML)注册为HTTP协议的内容编码(以及compress,deflate和gzip) 。这意味着EXI是一个选项,可以预期浏览器可能会与其他HTTP客户端一起理解。请参阅超文本传输协议参数(iana.org)。
我发现在数字市集上的这篇文章真的很有趣。引用Norm的报价:
关于JSON专家:
如果您只想传递原子值或原子值列表或哈希值,那么JSON具有XML的许多优点:它可以在Internet上直接使用,支持各种应用程序,编写程序来处理JSON容易,它具有很少的可选功能,清晰易读,设计简洁明了,易于创建JSON文档,并且使用Unicode。...
关于XML专家:
XML可以很好地处理非结构化数据的全部丰富性。我不担心XML的未来,即使Web API设计人员的欢呼庆祝它的消亡。
而且我忍不住要塞一个“我告诉过你!” 在我的桌子上走了。我很期待看到JSON人员在被要求开发更丰富的API时会做什么。当他们想交换结构较少的数据时,会否将其转换为JSON?我偶尔会提到JSON的架构语言,还会跟随其他语言吗?...
我个人同意Norm。我认为对XML的大多数攻击来自典型应用程序的Web开发人员,而不是集成开发人员。但这是我的意见!;)
{ "foo": 42 }
那是什么类型的物体?然后,要解决缺少类型的问题,将显示以下内容:{ "__type": "Bar", "foo": 42 }
。相反,在XML中,类型可以表示元素名称:<Bar><foo>42</foo></Bar>
。只有
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的重要事项是出于安全原因对数据传输进行加密。毫无疑问,JSON比XML快得多。我已经看到XML需要100毫秒,而JSON仅需要60毫秒。JSON数据易于操作。