Answers:
如果满足以下任一条件,则将XML优先于JSON:
当所有这些都成立时,在XML上偏爱JSON:
我使用JSON,除非需要使用XML。它更易于理解,并且(因为它需要较少的配置开销)如果您的上下文中有可用的库,那么就更容易编写用于读写的程序,并且它们现在已经无处不在。
当亚马逊首次将其目录作为Web服务公开时,他们同时提供JSON和XML。大约90%的实施者选择了JSON。
考虑到您已经在客户端使用javascript的特定情况,出于以下原因,我将使用JSON:
由于JSON是javascript固有的,因此您只需在客户端编写更少的代码-只需eval()
(或者更好的是JSON.parse()
)JSON字符串并获得可以使用的对象即可。
同时,在客户端评估JSON会更高效,因此更快。
JSON序列化产生的字符串比XML短。使用JSON将减少跨线路运行的数据量,并在这方面提高性能。
这里是一些进一步的阅读:http : //www.subbu.org/blog/2006/08/json-vs-xml
eval()
荷兰国际集团JSON一大禁忌?
我在XML vs JSON relm中遇到了其他一些问题:
JSON非常适合
这意味着它倾向于喜欢数组或嵌套数组。但是JSON都缺少
因此,如果您要组合两个或多个JSON服务,则可能存在命名空间冲突。话虽如此,根据我的经验,在交换数据时,JSON可以用于XML的90%左右。
通常,JSON更紧凑,并且解析速度更快。
如果满足以下条件,则首选XML:
(几乎)XML的一个重要案例:尝试检测何时发送HTML代码段比发送原始数据更有益。AHAH可以在简单的应用程序中创造奇迹,但却经常被人们忽略。通常,此样式假定服务器发送HTML片段,这些片段将在网页中内联而不进行处理。
通常在AHAH情况下,会最大程度地利用CSS来可视化地按摩代码片段,并实现一些简单的条件,例如使用用户特定的或应用程序特定的设置来隐藏/显示代码片段的相关部分。
JSON易于解析且速度更快。XML解析起来有些困难,解析和传输起来也较慢(在大多数情况下)。
由于您使用的是jQuery,因此建议您使用JSON:jQuery可以检索JSON数据并将其自动转换为Javascript对象。实际上,您可以使用eval将JSON数据转换为Javascript对象。XML必须由您手动处理(我不知道这在Javascript中是如何工作的,但是在我使用过XML库的大多数语言中,这很难/烦人)。
我有一篇关于该主题的博客文章,详细介绍了网络协议的历史(即SOAP,XML,JSON,REST,POX等),提供了摘要以及每种协议的优点和缺点: http //www.servicestack.net / mythz_blog /?p = 154
实际上,我认为您可以通过比较动态(JSON)和静态(XML)语言之间的差异来得出XML与JSON之间的许多相似之处。
基本上,XML是一种更严格,更严格的序列化格式,可以选择使用附带的架构(XSD或DTD)进行验证。XSD非常详尽,可以让您描述许多不同的类型,例如日期,时间,枚举,用户定义的类型,甚至类型继承等。SOAP有效地建立在XML功能集的基础上,提供了描述Web服务的标准化方法(例如类型和操作)。WSDL规范的冗长和复杂性意味着使用它进行开发可能会比较乏味,但是同时您可以使用更多工具,并且大多数现代语言都提供了自动工具来生成客户代理,从而承担了一些负担尝试与外部服务进行互操作时关闭。
如果您拥有定义明确的“企业服务”,且无需经常更改,或者您需要从许多不同的语言访问Web服务,我仍然建议对Web服务使用XML。
尽管XML具有所有优点,但也具有缺点。它依靠名称空间来提供类型化的可扩展格式,并使您能够在同一文档中指定属性和元素。在一个文档中拥有不同的名称空间意味着在使用Xml Parser提取数据时,很多时候,您还需要提供要检索/遍历的每个元素的名称空间。它还可以推断有效载荷,使其变得比所需的更为冗长。可以输出属性和元素的选项意味着您的类不能很好地映射到XML文档。单凭这些功能,它就无法适应大多数语言的程序设计,使其使用起来更加繁琐和麻烦。
另一方面,JSON在很多方面与XML完全相反,因为它的类型非常松散,并且仅对基本类型(数字,布尔,字符串,对象和数组)提供简单的支持。其他所有内容基本上都必须包含在字符串中。尝试跨语言边界进行通信时,这不是很好,因为如果要支持更特定的类型,则需要遵循一些带外非标准规范。从好的方面来说,它有限的功能集可以很好地适应大多数语言的编程方式-并且非常适合JavaScript,因为JSON字符串可以直接评估为JavaScript对象。
尺寸和性能
我有一些罗斯文数据库基准可以用来比较Microsoft XML和JSON实现之间的大小和速度。基本上,XML的大小是JSON的2倍以上,但与此同时,Microsoft似乎在优化XML DataContractSerializer方面付出了很多努力,因为它比JSON快30%以上。似乎您必须在尺寸和性能之间进行权衡。我对这个事实不满意,因此决定编写自己的快速JsonSerializer,该速度现在比MS的XML快2.6倍-两者兼得:
当您沿JSON路线走时,会遇到与10年前XML相同的问题:
将来自两个不同来源的数据混合到一个JSON数据包中可能导致元素标签相互碰撞。将装箱单和发票混合在一起,突然“发件人”地址可能意味着完全不同。这就是XML具有命名空间的原因。
在不同的JSON结构之间进行转换将需要编写普通代码。更具声明性的数据映射方式将使工作变得更加容易。这就是XML具有XSLT的原因。
为了使人们能够使用您的服务,描述JSON数据包的结构(其字段,数据类型等)是必要的。为此,必须具有元数据语言。这就是XML具有Schema的原因。
同时进行两个客户端与服务器的对话很小心。如果您问服务器两个问题并得到一个答案,您如何知道它回答了什么问题?这就是XML具有WS-Correlation的原因。
从http://json.org/xml.html的第一行开始
可扩展标记语言(XML)是从标准通用标记语言(SGML)派生的文本格式。与SGML相比,XML很简单。相比之下,超文本标记语言(HTML)更简单。即使这样,一本关于HTML的优秀参考书也厚达一英寸。这是因为文档的格式化和结构化是一项复杂的工作。。。。
显然,JSON速度更快,但更清楚的是,它很难阅读。使用JSON来提高速度,如果可能发生人与人之间的互动,则使用XML,您可以牺牲速度。
我发现在数字市集上的这篇文章真的很有趣。
下面引用了本文的某些部分。
关于JSON专家:
如果您只想传递原子值或原子值列表或哈希值,那么JSON具有XML的许多优点:它可以在Internet上直接使用,支持各种应用程序,编写程序来处理JSON容易,它具有很少的可选功能,清晰易读,设计简洁明了,易于创建JSON文档,并且使用Unicode。...
关于XML专家:
XML可以很好地处理非结构化数据的全部丰富性。我不担心XML的未来,即使Web API设计人员的欢呼庆祝它的消亡。
而且我忍不住要塞一个“我告诉过你!” 在我的桌子上走了。我很期待看到JSON人员在被要求开发更丰富的API时会做什么。当他们想交换结构较少的数据时,会否将其转换为JSON?我偶尔会提到JSON的架构语言,还会跟随其他语言吗?...
快速规则:
说明:
JSON的唯一作用是使用大多数编程语言所共有的数据类型来序列化面向对象的数据:list,hash和scalars,为此,它确实不能被击败或改进。就是说“ JSON没有版本号[因为]预计不会对JSON语法进行任何修订”。- 道格拉斯·克罗克福德(Douglas Crockford)(不能以此来证明您做得很好)
XML曾经以数据交换格式的形式出售,但请考虑两个最常见的用例:异步客户端-服务器通信(AJAX) -JSON几乎完全取代了XML(X应该是J)和Web服务:JSON使XML成为多余的选择。
XML广泛使用的另一件事是程序的人类可写/可读(?)数据文件,但是在这里,您也可以在JSON超集YAML中使用更简洁,更程序友好,更人性化的格式。
因此,对于数据表示,JSON全面击败了XML。那么,XML还剩下什么呢?内容混合的文档表示形式,该用途旨在实现。