什么时候更喜欢JSON而不是XML?


Answers:


149

如果满足以下任一条件,则将XML优先于JSON:

  • 您需要消息验证
  • 您正在使用XSLT
  • 您的消息中包含很多标记文字
  • 您需要与不支持JSON的环境进行互操作

当所有这些都成立时,在XML上偏爱JSON:

  • 不需要验证消息,或者验证消息的反序列化很简单
  • 您不是要转换邮件,也不是转换邮件的反序列​​化很简单
  • 您的邮件主要是数据,而不是标记文字
  • 消息传递端点具有良好的JSON工具

9
与XML相比,JSON在处理标记文本方面没有任何优势。但我明白你的意思;这可能被夸大了。
罗伯特·罗斯尼

10
当所有条件都相等时,出于以下两个原因,建议使用JSON:JSON比XML(CPU友好)解析起来轻得多,并且需要传输的数据更少(网络友好)。
罗杰·巴雷托

什么时候使用XSLT而不使用XML?如果您已经在使用XSLT,则XML是给定的。那不应该支持使用XML的观点。这就像说如果您使用JSON.parse()使用JSON。另外,我认为与编写XSLT转换相比,转换JSON对象要容易得多,但这可能是我个人的偏见。
斯宾塞

我不完全同意JSON中的验证部分。JSON也有效。检查这个IETF草案:链接 这是一个草案,但仍..
sotn

@sotn您没有像XML(例如XQuery)那样具有JSON的PL / SQL。它是某些NoSQL DB(eXist,MarkLogic Server,EMC Documentum xDB,BaseX,Zorba)的基础
Dmytro Melnychuk

81

我使用JSON,除非需要使用XML。它更易于理解,并且(因为它需要较少的配置开销)如果您的上下文中有可用的库,那么就更容易编写用于读写的程序,并且它们现在已经无处不在。

当亚马逊首次将其目录作为Web服务公开时,他们同时提供JSON和XML。大约90%的实施者选择了JSON。


56
“除非使用XML,否则我使用JSON。” 〜对。
EndangeredMassa

2
因此,更深层的问题是“出于什么原因要求您使用XML?” 这些原因是白痴吗?还是它们只是从您的不同角度反映了不同的担忧?
2009年

5
几种可能的原因,包括我不想重写的现有软件。但是最重​​要的是将XML用作数据交换格式,在这种格式中我无法控制两端,或者存在适用且需要XML的正式标准。当我是唯一的开发人员时,我只能随意选择。
dkretz

15

考虑到您已经在客户端使用javascript的特定情况,出于以下原因,我将使用JSON:

  • 由于JSON是javascript固有的,因此您只需在客户端编写更少的代码-只需eval()(或者更好的是JSON.parse())JSON字符串并获得可以使用的对象即可。

  • 同时,在客户端评估JSON会更高效,因此更快。

  • JSON序列化产生的字符串比XML短。使用JSON将减少跨线路运行的数据量,并在这方面提高性能。

这里是一些进一步的阅读:http : //www.subbu.org/blog/2006/08/json-vs-xml


7
是不是eval()荷兰国际集团JSON一大禁忌?
shoosh

@ Shy,JSON自己的网站说您可以在JSON上使用eval(用括号括起来):json.org/js.html
strager

9
取自json.org:eval函数非常快。但是,它可以编译和执行任何JavaScript程序,因此可能存在安全问题。当来源是可信任的且合格的时,将指示使用eval。使用JSON解析器要安全得多
sarego,

2
首选JSON.parse()而不是eval()。
Havvy

14

我在XML vs JSON relm中遇到了其他一些问题:

JSON非常适合

  • 名称/值对
  • 嵌套那些对

这意味着它倾向于喜欢数组或嵌套数组。但是JSON都缺少

  • 属性
  • 命名空间

因此,如果您要组合两个或多个JSON服务,则可能存在命名空间冲突。话虽如此,根据我的经验,在交换数据时,JSON可以用于XML的90%左右。


Json的另一个问题是您不能轻易合并两个json消息以创建新的json消息。它通常不会被简洁(wellformed)..
VTD-XML的作者

7
您需要什么属性?如果您的元素包含其他值,则使其成为对象-成员是您的“属性”。坦率地说,我认为XML的双叉属性/容器结构完全有害。
foo

我认为JSON不具有属性是一项功能。
2015年

11

通常,JSON更紧凑,并且解析速度更快。

如果满足以下条件,则首选XML:

  • 您需要在客户端上处理数据,并且您可以利用XSL。XML + XSL链有可能比JSON + JavaScript更快地工作,特别是对于大块数据。
    • 一种很好的情况是将数据转换为HTML代码段。
  • 各种遗留案例:
    • 现有一个XML服务,由于某些原因,使用JSON重写它很麻烦。
    • 在使用用户输入进行一些轻处理之后,您必须将此数据作为XML发布回去。

(几乎)XML的一个重要案例:尝试检测何时发送HTML代码段比发送原始数据更有益。AHAH可以在简单的应用程序中创造奇迹,但却经常被人们忽略。通常,此样式假定服务器发送HTML片段,这些片段将在网页中内联而不进行处理。

通常在AHAH情况下,会最大程度地利用CSS来可视化地按摩代码片段,并实现一些简单的条件,例如使用用户特定的或应用程序特定的设置来隐藏/显示代码片段的相关部分。


8

JSON易于解析且速度更快。XML解析起来有些困难,解析和传输起来也较慢(在大多数情况下)。

由于您使用的是jQuery,因此建议您使用JSON:jQuery可以检索JSON数据并将其自动转换为Javascript对象。实际上,您可以使用eval将JSON数据转换为Javascript对象。XML必须由您手动处理(我不知道这在Javascript中是如何工作的,但是在我使用过XML库的大多数语言中,这很难/烦人)。


1
根据定义,JSON是JavaScript对象,而jQuery实际上并没有做任何特殊的“转换”。只是以为应该澄清。
Brian Gianforcaro

5
JSON不是javascript对象,除非已在javascript中实例化。它碰巧遵循用于序列化javascript对象的格式,但是从大多数语言(至少与XML一样容易)就可以访问(带有适当的加载项和内置插件)。
dkretz

@Gianforcaro,我意识到了这一点。我将编辑我的帖子以更清楚地说明这一点。@doofledorfer,我说过“并将其转换为Javascript对象”。我没有说JSON数据是Javascript对象。
斯特拉格

啊,对不起,没有抓住。
斯特拉格

8

就客户端浏览器解析数据所必须执行的处理而言,JSON始终是首选。另外,JSON是轻量级数据交换格式。

XML解析总是会消耗大量浏览器资源,除非另有要求,否则应尽可能避免使用XML。


7

我有一篇关于该主题的博客文章,详细介绍了网络协议的历史(即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倍-两者兼得:


6

如果我需要验证传入数据的块,我会选择XML而不是JSON,因为XML通过XSD天生就支持此功能。


3

从JSON-最后一脚

当您沿JSON路线走时,会遇到与10年前XML相同的问题:

将来自两个不同来源的数据混合到一个JSON数据包中可能导致元素标签相互碰撞。将装箱单和发票混合在一起,突然“发件人”地址可能意味着完全不同。这就是XML具有命名空间的原因。

在不同的JSON结构之间进行转换将需要编写普通代码。更具声明性的数据映射方式将使工作变得更加容易。这就是XML具有XSLT的原因

为了使人们能够使用您的服务,描述JSON数据包的结构(其字段,数据类型等)是必要的。为此,必须具有元数据语言。这就是XML具有Schema的原因。

同时进行两个客户端与服务器的对话很小心。如果您问服务器两个问题并得到一个答案,您如何知道它回答了什么问题?这就是XML具有WS-Correlation的原因。


2
命名空间只是另一个解决方法。您可以根据需要在JSON中进行相同的操作。WS-Correlation也作为事后考虑添加到XML中,并且不是“内置”的。您也可以将其添加到JSON中。结构描述(模式)不是XML专用的。自eBNF发明以来,您可以通过多种方式对任何正式语言进行处理。但是,XSLT是有效的卖点。
foo

2

JSON是javascript的本地编码。它应该更快,更容易使用。


2

http://json.org/xml.html的第一行开始

可扩展标记语言(XML)是从标准通用标记语言(SGML)派生的文本格式。与SGML相比,XML很简单。相比之下,超文本标记语言(HTML)更简单。即使这样,一本关于HTML的优秀参考书也厚达一英寸。这是因为文档的格式化和结构化是一项复杂的工作。。。。

显然,JSON速度更快,但更清楚的是,它很难阅读。使用JSON来提高速度,如果可能发生人与人之间的互动,则使用XML,您可以牺牲速度。


2
您的答案没有带来任何新信息……但是我想这仍然是真的

1

我将JSON用于任何类型的配置,数据交换或消息传递。仅在出于其他原因或出于语义原因标记类似于文档的数据时,才使用XML。


1

Microsoft支持XML和JSON。XML文字是VB 9中的新酷功能。在即将发布的ASP.NET 4.0版本中,必须利用JSON客户端模板的强大功能。

从您提出的问题来看,似乎JSON可能是您的选择,因为无论有无jQuery,它都可以在客户端轻松处理。


1

使用JSON

  • 如果数据将被浏览器中的JavaScript使用。
  • 数据模型既简单又不复杂(复合对象太多)。

使用XML

  • 通常在SOA类型的环境中,您要在异构平台和技术上集成多个服务。
  • SOAP的优点是可以通过HTTP以外的其他协议传输。
  • 易于在数据模型转换工具(如XSLT,XSL-FO等)中使用。
  • 许多数据库支持存储/查询(XQuery)XML数据。
  • XML是一种非常成熟的数据格式,因此您会发现很多工具可以支持您想到的任何用例。

1

我发现在数字市集上的这篇文章真的很有趣。

下面引用了本文的某些部分。

关于JSON专家:

如果您只想传递原子值或原子值列表或哈希值,那么JSON具有XML的许多优点:它可以在Internet上直接使用,支持各种应用程序,编写程序来处理JSON容易,它具有很少的可选功能,清晰易读,设计简洁明了,易于创建JSON文档,并且使用Unicode。...

关于XML专家:

XML可以很好地处理非结构化数据的全部丰富性。我不担心XML的未来,即使Web API设计人员的欢呼庆祝它的消亡。

而且我忍不住要塞一个“我告诉过你!” 在我的桌子上走了。我很期待看到JSON人员在被要求开发更丰富的API时会做什么。当他们想交换结构较少的数据时,会否将其转换为JSON?我偶尔会提到JSON的架构语言,还会跟随其他语言吗?...


此答案和摘录提供的内容完全歪曲了所引用文章的主题,而该文章强烈赞成JSON。引号来自与本文作者不同意的第三方。所引用的文章读起来非常好-因此,尽管陈述不实,也不能对此答案有任何不满。
劳伦斯·多尔

1

快速规则:

  • JSON:程序间数据格式
  • YAML(JSON超集):程序数据格式
  • XML:文档标记格式

说明:

JSON的唯一作用是使用大多数编程语言所共有的数据类型来序列化面向对象的数据:listhashscalars,为此,它确实不能被击败或改进。就是说“ JSON没有版本号[因为]预计不会对JSON语法进行任何修订”。- 道格拉斯·克罗克福德Douglas Crockford)(不能以此来证明您做得很好)

XML曾经以数据交换格式的形式出售,但请考虑两个最常见的用例:异步客户端-服务器通信(AJAX) -JSON几乎完全取代了XML(X应该是J)和Web服务:JSON使XML成为多余的选择。

XML广泛使用的另一件事是程序的人类可写/可读(?)数据文件,但是在这里,您也可以在JSON超集YAML中使用更简洁,更程序友好,更人性化的格式。

因此,对于数据表示,JSON全面击败了XML。那么,XML还剩下什么呢?内容混合的文档表示形式,该用途旨在实现


0

大多数较新的Web技术都使用JSON进行工作,因此绝对是使用JSON的一个很好的理由。一个很大的优点是,在XML中,您可以用多种不同的方式表示相同的信息,而在JSON中则更直接。

而且,JSON IMHO比XML更清晰,这对我来说是一个明显的优势。而且,如果您使用的是.NET,Json.NET无疑是可以帮助您使用JSON的赢家。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.