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

2020/11/12 03:22 · javascript ·  · 0评论

我的要求是仅显示跨数据库从数据库检索的一组值。我正在使用jquery。

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

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

当所有这些都为真时,在XML上偏爱JSON:

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

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

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解析始终会消耗大量浏览器资源,除非另有要求,否则应尽可能避免。

我有一篇关于该主题的博客文章,详细介绍了网络协议的历史(即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分析器提取数据时,很多时间,您还需要提供要检索/遍历的每个元素的名称空间。它还可以推断有效负载,使其变得比所需的更加冗长。可以输出属性和元素的选项意味着您的类不能很好地映射到XML文档。单凭这些功能,它就无法适应大多数语言的程序设计,使其使用起来更加繁琐和麻烦。

另一方面,JSON在很多方面与XML完全相反,因为它的类型非常松散,并且仅对基本类型(数字,布尔,字符串,对象和数组)提供简单的支持。其他所有内容基本上都必须包含在字符串中。在尝试跨语言边界进行通信时,这不是很好,因为如果您要支持更具体的类型,则需要遵循一些带外非标准规范。从好的方面来说,其有限的功能集非常适合大多数语言的编程方式-完全适合JavaScript,因为可以将JSON字符串直接评估为JavaScript对象。

尺寸和性能

我有一些罗斯文数据库基准可以用来比较Microsoft XML和JSON实现之间的大小和速度。基本上,XML的大小是JSON的2倍以上,但与此同时,Microsoft似乎在优化XML DataContractSerializer方面做了很多努力,因为它比JSON快30%以上。似乎您必须在尺寸和性能之间进行权衡。我对这个事实不满意,所以我决定编写自己的快速JsonSerializer,它现在的速度是MS的XML的2.6倍-两者兼而有之:)。

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

从JSON-最后一脚

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

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

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

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

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

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

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

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

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

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

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

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

使用JSON

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

使用XML

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

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

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

关于JSON专家:

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

关于XML专家:

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

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

快速规则:

  • 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还剩下什么呢?内容混合的文档表示形式,该用途旨在实现

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

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

我在这里看到一些偏见教条。看来,针对xml的答案过于简化了,并且仅来自Web Development的上下文(这对问题是有意义的),因此我认为id提供了一些其他的见解,以防万一有人跨过此问题并需要数据的答案在其他情况下的序列化。

这是严格的规则:

毫无疑问,XML绝对更强大。因此,当您的数据模型非常复杂而需要以下功能时,请使用它:

  1. 支持命名空间
  2. 支持对象定向,即继承/多态
  3. 支持包含和可扩展性,以实现复杂类型的重用。
  4. 一个可靠,成熟和完整的架构验证系统所需的支持。

    • w3c Schema Validation系统具有强大的JSON Schema功能,并且有更多文献可供学习。
  5. 支持混合内容文档数据建模和记录,例如数据建模。

JSON更易于学习,理解和使用。因此,当您没有时间学习XML并且不需要上述任何功能时,请使用它。如果您的用例很重要,它的电线也更轻巧。

TL:DR, XML可以做json可以做的所有事情,但是比较重。反之则不正确。是的,Json更简单,因此使用了更多,但这并不意味着它可以代替XML。在我要面对2020年这一年的情况下,json并未满足我们的用例需求,我们确实需要XML。如果需要的话,我可以谈更多。干杯,祝你好运。

本文地址:http://javascript.askforanswer.com/shenmeshihougengxihuanjsonerbushixml.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!