小编典典

JSON 和 XML 比较

all

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


阅读 63

收藏
2022-05-05

共1个答案

小编典典

在回答何时使用哪一个之前,先介绍一下背景:

编辑:我应该提到,这种比较实际上是从在带有 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

在 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 已经给出了一个相当简洁的答案,就何时使用它们进行了比较,所以我不会再继续下去了。

2022-05-05