我的要求就是在展开时显示从数据库中检索的一组值.我正在使用jquery.
当任何这些都成立时,支持XML而不是JSON:
您需要消息验证
你正在使用XSLT
您的邮件包含大量标记文本
您需要与不支持JSON的环境进行互操作
当所有这些都成立时,支持JSON over XML:
消息不需要验证,或验证它们的反序列化很简单
您没有转换消息,或者转换它们的反序列化很简单
您的邮件主要是数据,而不是标记文本
消息传递端点具有良好的JSON工具
除非我需要使用XML,否则我使用JSON.它更容易理解,并且(因为它需要更少的配置开销)如果库在您的上下文中可用,则更容易编写读取和写入,并且它们现在非常普遍.
当亚马逊首次将其目录公开为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
我在XML vs JSON中遇到的其他一些问题:
JSON非常适合
名称/值对
嵌套那些对
这意味着它倾向于喜欢数组或嵌套数组.但是JSON缺少两者
属性
命名空间
因此,如果您要组合两个或更多JSON服务,则可能存在潜在的命名空间冲突.据说JSON可用于在我的经验中交换数据时可用于XML的大约90%相同的事情.
通常JSON更紧凑,解析速度更快.
首选XML,如果:
您需要在客户端上处理数据,并且可以利用XSL.有可能XML + XSL链比JSON + JavaScript工作得更快,特别是对于大块数据.
一个很好的例子是将数据转换为HTML片段.
各种遗留案件:
有一个现有的XML服务,由于某些原因,用JSON重写它是一件麻烦事.
在使用用户输入进行一些轻量处理之后,您必须将此数据作为XML发布回来.
(几乎)XML的一个重要案例:尝试检测何时发送HTML片段比发送原始数据更有益.AHAH可以在简单的应用程序中创造奇迹,但经常被忽视.通常,此样式假定服务器发送的HTML片段将在网页中内联而不进行处理.
通常在AHAH案例中,CSS可以最大限度地利用视觉按摩片段并实现简单的条件,例如使用特定于用户或特定于应用程序的设置隐藏/显示片段的相关部分.
JSON很容易解析.XML解析起来有点困难,解析和传输速度较慢(在大多数情况下).
由于您使用的是jQuery,我建议使用JSON:jQuery可以检索JSON数据并自动将其转换为Javascript对象.实际上,您可以使用eval将JSON数据转换为Javascript对象.XML必须由您手动遍历(我不知道它在Javascript中是如何工作的,但在大多数语言中我使用XML库都很困难/更烦人).
就客户端浏览器处理数据所需的处理而言,JSON总是更可取的.此外,JSON是轻量级数据交换格式.
XML解析总是消耗大量的浏览器资源,除非另有要求,否则应尽可能避免.
我有一篇关于这个主题的博客文章,详细介绍了Web协议的历史(即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.WSDL规范的详细程度和复杂性意味着开发可能会更加繁琐,但同时可以使用更多工具,大多数现代语言都提供自动化工具来生成客户端代理,从而承担一些负担尝试与外部服务进行互操作时关闭.
如果您有一个定义明确的"企业服务",不经常更改或者您的Web服务需要从许多不同的语言访问,我仍然建议您使用XML作为Web服务.
尽管如此,XML也有缺点.它依赖于命名空间以提供类型化的可扩展格式,并允许您在同一文档中指定属性和元素.在一个文档中使用不同的命名空间意味着在使用Xml Parser提取数据时很多时候,您还需要提供要检索/遍历的每个元素的命名空间.它还可以推断有效载荷,使其更加冗长.具有输出属性和元素的选项意味着您的类不能很好地映射到XML文档.仅这些功能使其成为大多数语言的程序设计,使得使用起来更加繁琐和繁琐.
另一方面,JSON在很多方面与XML完全相反,因为它的类型非常松散,并且只支持基本类型:Number,Bool,string,Objects和Arrays.其他一切基本上都必须符合字符串.当尝试跨语言边界进行通信时,这并不是很好,因为如果要支持更具体的类型,则需要遵守一些带外非标准规范.从好的方面来说,它的有限特性集可以很好地适应大多数语言 - 并且非常适合JavaScript,因为JSON字符串可以直接在JavaScript对象中进行评估.
尺寸和性能
我有一些Northwind数据库基准可用,比较了Microsofts XML和JSON实现之间的大小和速度.基本上,XML的大小是JSON的2倍,但同时看起来微软在优化XML DataContractSerializer方面投入了大量精力,因为它比JSON快了30%.看来你必须在尺寸和性能之间进行权衡.对这个事实不满意,我决定编写自己的快速JsonSerializer,它现在比MS的XML快了2.6倍 - 两者都是最好的:).
如果我需要验证传入数据的块,我会选择XML over JSON,因为XML通过XSD本身支持这一点.