栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JSON和XML比较

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JSON和XML比较

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

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

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

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

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

解析器不需要足够的智能就可以意识到它

12
代表一个数字(和
Danielle
其他字符串一样)。因此,在javascript中,我们可以执行以下操作:

anObject = JSON.parse(myJSON);anObject.age === 12 // TrueanObject.name == "Danielle" // TrueanObject.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" // TruethePerson.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已经提出了一个相当简洁的答案,就何时使用它们进行比较,因此我将不再赘述。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399823.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号