Fel*_*ing 241
更快不是JSON或XML的属性,或者是这些属性之间的比较会产生的结果.如果有,则它是解析器的属性或传输数据的带宽.
以下是(开头)JSON和XML的优缺点列表:
优点:
缺点:
语法简单,只支持少数几种不同的数据类型.
不支持评论.
优点:
缺点:
所以最后你必须决定你需要什么.显然,这两种格式都有其合法用例.如果您主要使用JavaScript,那么您应该使用JSON.
请随意添加利弊.我不是XML专家;)
jel*_*ord 218
在回答何时使用哪一个,有一点背景之前:
编辑:我应该提一下,这种比较实际上是从在JavaScript浏览器中使用它们的角度来看.这也不数据格式的方法有被使用,并且有很多很好的解析器,这将改变细节,使我在说什么不是很有效的.
JSON更紧凑,并且(在我看来)更具可读性 - 在传输中它可以"更快",因为传输的数据更少.
在解析中,它取决于您的解析器.将代码(无论是JSON还是XML)转换为数据结构(如地图)的解析器可以受益于XML的严格性(XML Schema很好地消除数据结构的歧义) - 但是在JSON中项目的类型(String /数字/嵌套JSON对象)可以在语法上推断,例如:
myJSON = {"age" : 12,
"name" : "Danielle"}
Run Code Online (Sandbox Code Playgroud)
解析器不需要足够智能来实现12代表数字(和Danielle任何其他字符串一样).所以在javascript中我们可以这样做:
anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False
Run Code Online (Sandbox Code Playgroud)
在XML中,我们必须执行以下操作:
<person>
<age>12</age>
<name>Danielle</name>
</person>
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,这说明了XML更加冗长;数据传输的一个问题).要使用这些数据,我们将通过解析器运行它,然后我们必须调用类似的东西:
myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True
Run Code Online (Sandbox Code Playgroud)
实际上,一个好的解析器可能会age为你打字(另一方面,你可能不希望它).当我们访问这些数据时发生了什么 - 而不是像上面的JSON示例那样进行属性查找 - 我们正在对密钥进行地图查找name.像这样形成XML可能更直观:
<person name="Danielle" age="12" />
Run Code Online (Sandbox Code Playgroud)
但我们仍然需要进行地图查找才能访问我们的数据:
myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");
Run Code Online (Sandbox Code Playgroud)
编辑:原文:
在大多数编程语言中(并非所有编程语言),像这样的地图查找将比属性查找更昂贵(就像我们在解析JSON时得到的那样).
这是误导性的:请记住,在JavaScript(和其他动态语言)中,地图查找和字段查找之间没有区别.事实上,现场查找的只是一个地图查找.
如果您想进行真正有价值的比较,最好是对其进行基准测试 - 在您计划使用数据的上下文中执行基准测试.
正如我一直打字的那样,Felix Kling已经提出了一个相当简洁的答案,比较它们何时使用每一个,所以我不再继续下去了.
Hib*_*u57 20
然而,处理速度可能不是唯一的相关问题,因为这是一个问题,这里是基准测试中的一些数字:JSON与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).
Chr*_*lma 15
我在数字集市上发现这篇文章真的很有趣.引用他们的报价来自Norm:
关于JSON专业人士:
如果你想绕过是原子值或列表或原子值的哈希值,JSON有很多的XML的优点:它是通过互联网直接地使用,支持多种应用,可以很容易地编写程序来处理JSON,它具有很少的可选功能,人性化且清晰,设计简洁,JSON文档易于创建,并且使用Unicode....
关于XML专业人士:
XML非常好地处理非结构化数据的丰富性.我并不担心XML的未来,即使它的死亡是由一群网络API设计师兴高采烈地庆祝的.
我无法抗拒说"我告诉你了!" 令牌在我的桌子上.我期待看到JSON人员在被要求开发更丰富的API时会做些什么.当他们想要交换结构不太好的数据时,他们会把它变成JSON吗?我偶尔会看到JSON的模式语言,其他语言会跟随吗?...
我个人同意Norm.我认为大多数针对XML的攻击来自Web开发人员的典型应用程序,而不是来自集成开发人员.但那是我的看法!;)
Ger*_*ári 14
XML(可扩展标记语言)通常用于XHR,因为它是标准的广播语言,可以被任何编程语言使用,并且支持服务器和客户端,因此这是最灵活的解决方案.可以将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占用100ms,因为JSON只需要60ms.JSON数据易于操作.
| 归档时间: |
|
| 查看次数: |
360491 次 |
| 最近记录: |