为什么大家selectjQuery XML的jQuery?

我认为XML是高度可移植的,可以用作迷你数据库。 我已经看到了XML到处使用。 我甚至看到大公司切换到JSON 。 即使微软已经整合了对JSON的支持。 什么是JSON的所有炒作?

基本上,因为JSON本身就是由JavaScript来识别的,所以它非常轻巧,极简而言之,而且非常便携,因为它只依赖于两个基本的结构:

  • 名称/值对的集合。 在各种语言中,这被实现为对象,logging,结构,字典,散列表,键控列表或关联数组。
  • 有序的值列表。 在大多数语言中,这是作为数组,vector,列表或序列来实现的。

在开始混合不同名称空间模式之前,XML并不真正开始发光。 然后你会看到JSON开始下降,但是如果你只需要数据的序列化格式,JSON就会比XML更小,重量更轻,更具可读性,而且通常更快。

我发现JSON优于XML的好处是我不必决定如何格式化数据。 正如一些人所说的,在XML中有很多方法可以实现简单的数据结构 – 作为元素,作为属性值等。然后,你必须logging它,写出XML Schema或Relax NG或其他废话…一团糟。

XML可能有其优点,但对于基本的数据交换来说,JSON更加紧凑和直接。 作为Python开发人员,JSON和Python中的简单数据types之间不存在阻抗不匹配。 所以,如果我正在为一个特定的滑雪胜地询问有关降雪条件的AJAX查询来编写服务器端处理程序,那么我会build立一个字典,如下所示:

conditions = { 'new_snow_24': 5.0, 'new_snow_48': 8.5, 'base_depth': 88.0, 'comments': 'Deep and steep!', 'chains_required': True, } return simplejson.dumps(conditions) # Encode and dump `conditions` as a JSON string 

当通过JSON进行翻译时(使用类似Python的'simplejson'),JSON结构看起来几乎相同(除了JSON,布尔值是小写的)。

对该结构进行解码只需要一个JSONparsing器,无论是用于Javascript还是Objective-C用于本地iPhone应用程序或C#或Python客户端。 浮游物将被解释为浮游物,string作为string,布尔值作为布尔值。 在Python中使用'simplejson'库, simplejson.loads(some_json_string)语句会给我一个完整的数据结构,就像我在上面的例子中所做的那样。

如果我写了XML,我不得不决定是否做元素或属性。 以下两个都是有效的:

 <conditions> <new-snow-24>5</new-snow-24> <new-snow-48>8.5</new-snow-48> <chains-required>yes</chains-required> <comments>deep and steep!</comments> </conditions> <conditions newSnow24="5" newSnow48="8.5" chainsRequired="yes"> <comments>deep and steep!</comments> </conditions> 

因此,我不仅要考虑可能要发送给客户的数据,还要考虑如何格式化数据。 XML虽然比简单的SGML更简单,但对规则更加严格,但仍然提供了太多的方法来思考这些数据。 然后,我将不得不去产生它。 我不能只是拿一个Python字典(或其他简单的数据结构),并说“去自己的XML”。 我不能收到一个XML文档,并且不用编写自定义分析器,或者不需要XML Schema / Relax NG等额外开销,就立即说出“自己创build对象和数据结构”。

简而言之,将数据编码和解码为JSON更容易,更直接,特别是对于快速交换。 由于JavaScript / JSON内置的基本数据types(列表,字典等)直接映射到Python,Perl,Ruby等相同或相似的数据types,因此这可能适用于来自dynamic语言背景的人员。

对于大多数用例来说,JSON的性能与XML没有太大的区别,JSON对深层嵌套结构来说是不太适合和可读的……您将遇到]]]}],这使得debugging变得困难

与XML相比,它是轻量级的。 如果你需要扩展,减less你的带宽需求!

比较JSON

  [ { color: "red", value: "#f00" }, { color: "green", value: "#0f0" }, { color: "blue", value: "#00f" }, { color: "cyan", value: "#0ff" }, { color: "magenta", value: "#f0f" }, { color: "yellow", value: "#ff0" }, { color: "black", value: "#000" } ] 

到XML:

  <colors> <color > <name>red</name> <value>#f00</value> </color> <color > <name>green</name> <value>#0f0</value> </color> <color > <name>blue</name> <value>#00f</value> </color> <color > <name>cyan</name> <value>#0ff</value> </color> <color > <name>magenta</name> <value>#f0f</value> </color> <color > <name>yellow</name> <value>#ff0</value> </color> <color > <name>black</name> <value>#000</value> </color> </colors> 

只是从我个人的经验中轶事:

我写了一个小的Javascript目录,首先用XML格式的数据,然后调整它使用JSON,所以我可以并排运行它们,并与Firebug比较速度。 JSON的速度大约快了3倍(350-400毫秒比1200-1300毫秒来显示所有的数据)。 另外,正如其他人所指出的那样,JSON在眼睛上更容易,文件尺寸减小了25%,这是由于精简的标记。

  <colors> <color name='red' value='#f00'/> <color name='green' value='#0f0'/> <color name='blue' value='#00f'/> <color name='cyan' value='#0ff'/> <color name='magenta' value='#f0f'/> <color name='yellow' value='#ff0'/> <color name='black' value='#000'/> </colors> 

有了属性,XML是很好的。 但是由于某种原因,自制的XML通常是由元素组成的,而且很丑。

容易被JavaScript使用可能是其中一个原因。

JSON最适合用于Web服务中的Web应用程序中的数据,因为它的大小和易用性,特别是由于JavaScript内置的支持。 想象一下,与JSON中的即时查询相比,parsingxml片段的计算开销。

JSON-P就是一个很好的例子。 你可以从一个包含在callback函数调用中的web服务获取数据,比如my_callback({"color": "blue", "shape":"square"}); 在一个dynamic生成的<script>标签内,这样数据可以直接在函数my_callback() 。 使用XML无法实现这种便利。

XML将成为大型文档的select格式,您可以使用XSLT以多种格式呈现数据页面。 XML还可以与应用程序configuration文件一起使用,以用于许多其他用途的可读性。

这里没有人提到XML-s的主要优势:validation规则(DTD,XSD)。 我的结论是:

  • JSON非常适合Ajax,特别是如果你自己开发服务器和客户端。 你基本上在你的服务器脚本中创buildjs对象!
  • 在企业环境中,当你不得不在大型官僚机构之间​​设定数据交换标准时,XML就会闪耀。 通常情况下,一方在几个月前就开始发展,所以它确实可以从对XSD的认可中获益。 另外,在大公司中,数据传输通常在不同的系统之间进行转换。 这也是XML的力量,想想XSLT。 示例:无代码转换为JSON:p

当然,正在开发json-schema,但是你不会在任何地方find内置的支持。

我是两个迷,他们有不同的优势。

现在大多数语言都有JSON编码器和解码器,没有理由不使用JSON来进行有意义的使用(这可能是XML的90%的用例)。

我甚至听说过在大型SQL数据库中使用JSONstring来简化模式更改。

说实话,JSON和XML之间没有太大的区别,因为它们可以代表所有types的数据。 但是,XML在语法上比JSON大,这使得它比JSON更重。

JSON与JavaScript编程没有阻抗不匹配。 JSON可以包含整数,string,列表,数组。 XML只是元素和节点,需要被分解为整数等才能被使用。

两者都很棒,非常便携。 然而,JSON在大多数情况下序列化为更less的字符(这意味着更快的交付时间),并且由于它与JavaScript对象语法相匹配,所以它可以直接转换为内存中的对象,这使得Ajax更容易实行。

XML仍然很棒。 与XML相比,JSON只是“最新和最伟大的”。

轻松parsingJavaScript,轻量级(JSON中的文档小于包含相同数据的XML文档)。

JSON是有效的序列化JavaScript,因为您可以将(aJsonString)直接拖到JavaScript对象中。 在浏览器内部,JSON非常适合JavaScript。 与此同时,JavaScript是一种非常松散的dynamic语言,不能从本质上利用Xml / Xsd文档中包含的所有可用的特定types信息。 这个额外的元数据(这对于互操作性来说非常有用)是JavaScript的一个障碍,使得它更加繁琐,而且更加复杂。

大小与性能

如果您在浏览器中,JSON序列化/反序列化速度更快,因为它更简单,更紧凑,更重要的是本机支持。 我有一些Northwind数据库的基准testing可用比较不同序列化器之间的大小和速度。 在基类库中,Microsoft的XML DataContract序列化程序比JSON速度快30%以上。 虽然这与微软在XML序列化程序中付出的努力有关,但我开发的JsonSerializer的速度比XML快2.6倍以上。 至于基准testing的有效载荷,看起来好像XML大概是JSON大小的两倍 。 但是,如果您的XML有效负载在同一文档中使用了许多不同的名称空间,则这可能会很快失效。

XML在大多数情况下是膨胀的蛇油。 JSON给你的大部分好处没有膨胀。

除了这里提到的一个主要优点。 对于相同的数据,有多种方式来表示它作为一个XML文件,但只有一种方式与JSON,消除歧义:)

我不是专家,但是从我工作过的各个公司,我们通常在小数据环境或configuration值中使用XML(web.config是一个很好的例子)。

当你有大量的数据,一般来说,你会想要报告这些数据。 XML不是一个很好的报告来源。 在事情的macros伟计划中,似乎事务数据库比XML更容易报告/search。

这有道理吗? 正如我上面所说,我不是专家,但从我的经验来看,似乎是这样。 另外,由于开发人员转向客户端或脚本操作以增强用户界面( Ajax )的视觉效果,微软整合了JSON支持,而微软的Ajax并没有像jQuery和MooTools这样的其他库雅虎的YUI也在这样的组合中),因为它们使用JSON优美地集成了可序列化的对象。

我发现自己正在编写代码,现在在我的VB代码中实现了JSON序列化程序。 这太简单了,从升级/修改的angular度来看,你无法打败它。 这是微软让我们沉迷于VS的方式。 我最近将企业应用程序转换为使用Ajax(通过jQuery)和使用JSON格式。 这花了大约2个星期的时间。 我真的感谢微软整合它,因为没有它,我将不得不写很多额外的代码。