我想知道哪个更快:XML和JSON? 何时使用哪一个?
我想知道哪个更快:XML和JSON? 何时使用哪一个?
优点:
缺点:
简单的语法,只支持少量不同的数据类型。
不支持注释。
优点:
缺点:
最终你必须决定你需要什么。很明显,这两种格式都有它们合理的使用情况。如果你主要使用JavaScript,那么你应该选择JSON。
请随意添加优缺点。我不是XML专家 ;)
id
属性唯一来实现此功能。 - Earth Engine回答何时使用哪个之前,先了解一些背景:
编辑:我应该提到,这个比较实际上是从在浏览器中使用JavaScript的角度出发的。这不是数据格式必须使用的方式,有很多好的解析器会改变细节,使得我的说法不完全正确。
JSON既更紧凑又更可读(在传输过程中可以更快地传输更少的数据)。
在解析方面,这取决于你的解析器。将代码(无论是JSON还是XML)转换为数据结构(如映射)的解析器可能会受益于XML严格的本质(XML模式能够清晰地区分数据结构),但在JSON中,项目的类型(字符串/数字/嵌套JSON对象)可以通过语法推断,例如:
myJSON = {"age" : 12,
"name" : "Danielle"}
解析器不需要足够智能以意识到12
代表一个数字(而Danielle
像其他字符串一样)。因此,在javascript中,我们可以这样做:
anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False
<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
<person name="Danielle" age="12" />
但是我们仍然需要进行地图查找来访问我们的数据:
myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");
编辑:原文:
在大多数编程语言中(并非全部),此类地图查找将比属性查找更为昂贵(例如我们在解析JSON时获得的内容)。
这是误导性的:请记住,在JavaScript(以及其他动态语言)中,没有区别地图查找和字段查找之间的区别。实际上,字段查找就是一种地图查找。
如果您想进行真正有价值的比较,请对其进行基准测试-在计划使用数据的环境中进行基准测试。
当我在打字时,Felix Kling已经提供了一个相当简洁的答案,比较它们何时使用每个答案,所以我不会再继续了。
处理速度可能不是唯一相关的问题,然而,既然这是问题,这里有一些基准测试中的数字:JSON vs. XML: Some hard numbers about verbosity。在这个简单的基准测试中,XML比JSON多出21%的开销。
关于冗余性的重要说明,正如文章所说,这是最常见的抱怨之一:实际上并不是很重要(XML和JSON数据通常不是由人类处理,而是由机器处理),即使为了速度的考虑,压缩需要一些合理的额外时间。
此外,在这个基准测试中,处理了大量的数据,而典型的 Web 应用程序不会传输这么大的数据块,例如 90MB,压缩可能并不有益(对于足够小的数据块,压缩后的块将比未压缩的块更大),因此不适用。
尽管如此,如果没有压缩,JSON 显然更加简洁,将更轻巧地通过传输通道传输,特别是在通过 WebSocket 连接传输时,在那里,没有经典 HTTP 开销可能会使 JSON 的优势更加显著。
在传输后,数据需要被消耗,这对总体处理时间也有影响。如果要传输大或复杂的数据,则缺少验证 XML 解析器自动检查的模式可能需要在 JSON 数据上进行更多检查;这些检查必须在 JavaScript 中执行,而后者并不以特别快闻名,因此在这种情况下,它可能比XML更加繁琐。
无论如何,只有测试才能为您特定的用例提供答案(如果速度确实是唯一的问题,而不是标准、安全性或完整性...)。
更新1:值得一提的是EXI,这种二进制XML格式提供了比使用Gzip更低成本的压缩,并且节省了解压缩XML所需的处理过程。EXI就像BSON对JSON一样对XML进行了处理。在这里可以快速概述一下,同时还可以参考其在空间和时间方面的效率:EXI: The last binary standard?。我发现数字市集上这篇文章很有趣。引用他们从Norm那里引用的话:
关于JSON优点:
如果你想传递的只是原子值或原子值的列表或哈希,JSON具有许多XML的优点:它可以直接在互联网上使用,支持各种各样的应用程序,容易编写处理JSON的程序,可选特性较少,易于阅读和相对清晰,其设计是正式和简明的,JSON文档易于创建,并使用Unicode......
关于XML优点:
XML非常好地处理了非结构化数据的丰富性。即使一些Web API设计师欢呼XML的死亡,我也不担心XML的未来。
我不能抗拒将“我早就告诉过你!”的令牌藏在我的桌子里。我期待看到当JSON的开发者被要求开发更丰富的API时,他们会做什么。当他们想要交换结构不太良好的数据时,他们会把它塞进JSON吗?我偶尔看到JSON的模式语言的提及,其他语言会跟随吗?......
我个人同意Norm的观点。我认为大多数对XML的攻击来自于针对典型应用程序的Web开发人员,而不是集成开发人员。但这只是我的观点!;)
{ "foo": 42 }
这个对象是什么类型?然后,为了解决缺乏类型的问题,就会出现这样的东西:{ "__type": "Bar", "foo": 42 }
。相比之下,在XML中,类型可以被赋予元素名称:<Bar><foo>42</foo></Bar>
。只有Lisp和JavaScript的人喜欢JSON ;) - BitTicklerJSON的重要之处在于出于安全原因需要保持数据传输加密。毫无疑问,JSON比XML快得多得多。我曾经看到XML需要100ms,而JSON只需要60ms。JSON数据易于操作。