为什么Everyone为jQuery选择JSON Over XML?

时间:2009-11-16 17:13:18

标签: jquery xml json

我认为XML非常便携,可以用作迷你数据库。我见过无处不在的XML。我甚至看到大公司转向JSON。甚至微软也集成了对JSON的支持。什么是对JSON的炒作?

19 个答案:

答案 0 :(得分:225)

基本上因为JSON是由JavaScript本身识别的,它非常轻量级,简约且高度可移植,因为它仅依赖于两个基本结构:

  • 名称/值对的集合。在各种语言中,这被实现为对象,记录,结构,字典,哈希表,键控列表或关联数组。
  • 有序的值列表。在大多数语言中,这被实现为数组,向量,列表或序列。

答案 1 :(得分:135)

在您开始将不同的命名空间架构混合在一起之前,XML并没有真正开始发挥作用。然后你会看到JSON开始崩溃,但是如果你只需要数据的序列化格式,那么JSON比XML更小,更轻,更易读,并且通常比XML更快。

答案 2 :(得分:61)

我发现JSON相对于XML的一大好处是我不必决定如何格式化数据。正如一些人所表明的那样,有许多方法可以在XML中做简单的数据结构 - 作为元素,作为属性值等。然后你必须记录它,编写XML Schema或Relax NG或其他一些废话......它是一团糟。

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

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翻译时(使用类似'simplejson'的Python),生成的JSON结构看起来几乎相同(除了在JSON中,布尔值更低)。

解码该结构只需要JSON解析器,无论是针对本机iPhone应用程序的Javascript还是Objective-C,还是C#或Python客户端。浮点数将被解释为浮点数,字符串被解释为字符串,而布尔值则被解释为布尔值。使用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和其他类似的开销。

缺点是,将数据编码和解码为JSON更加容易和直接,特别是对于快速交换。这可能更适用于来自动态语言背景的人,因为内置于JavaScript / JSON的基本数据类型(列表,字典等)直接映射到Python,Perl,Ruby等中相同或相似的数据类型。 / p>

答案 3 :(得分:34)

对于大多数用例,JSON的性能与XML没有太大区别,JSON不太适合 深度嵌套结构可读...你会遇到]]]}],这使调试变得困难

答案 4 :(得分:31)

与XML相比,它是轻量级的。如果您需要扩展,请降低带宽要求!

比较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>

答案 5 :(得分:28)

仅仅是我个人经历的轶事:

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

答案 6 :(得分:20)

 <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通常100%由元素组成,而且很难看。

答案 7 :(得分:18)

JavaScript的轻松消费可能是其中一个原因..

答案 8 :(得分:10)

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

一个很好的例子是JSON-P。您可以从回调函数调用中包含的Web服务中获取数据,例如动态生成的my_callback({"color": "blue", "shape":"square"});标记内的<script>,以便可以在函数my_callback()中直接使用数据。使用XML无法接近这种便利。

XML将是大型文档的首选格式,您可以使用XSLT以多种格式呈现数据页面。 XML还可以与应用程序配置文件一起使用,以便在许多其他用途中使用。

答案 9 :(得分:8)

这里没有人提到XML的主要优势:验证规则(DTD,XSD)。我的结论,使用了两者:

  • JSON非常适合ajax,特别是如果您自己开发服务器端和客户端端。您基本上可以在服务器脚本中创建js对象!
  • 当您必须在大型官僚组织之间设置数据交换标准时,XML会在企业环境中大放异彩。通常情况下,一方在几个月之前就开发了它的部分,因此它确实可以从对商定的XSD的请求进行验证中获益。此外,在大公司中,数据传输通常在不同系统之间进行转换。这也是XML的优势,想想XSLT。示例:无代码转换为JSON:p

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

我是两者的粉丝,他们有不同的优势。

答案 10 :(得分:6)

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

我甚至听说过在大型SQL数据库中使用JSON字符串来简化架构更改。

答案 11 :(得分:5)

老实说,JSON和XML之间并没有那么多,因为它们可以代表所有类型的数据。但是,XML在语法上比JSON大,这使得它比JSON更重。

答案 12 :(得分:5)

JSON与JavaScript编程没有阻抗不匹配。 JSON可以包含整数,字符串,列表,数组。 XML只是元素和节点,需要在被消费之前解析为整数等等。

答案 13 :(得分:4)

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

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

答案 14 :(得分:4)

轻松解析JavaScript并且它是轻量级的(JSON中的文档小于包含相同数据的XML文档。)

答案 15 :(得分:3)

JSON是有效的序列化JavaScript,您可以将eval(aJsonString)直接转换为JavaScript对象。在浏览器中,它是一个简单的JSON非常适合JavaScript。同时,JavaScript是一种非常松散类型的动态语言,无法原生地利用Xml / Xsd文档中包含的所有特定类型信息。这些额外的元数据(非常适合互操作性)是JavaScript中的一个障碍,使得它更加繁琐和繁琐。

尺寸与效果

如果你在浏览器中,JSON的序列化/反序列化速度更快,因为它更简单,更紧凑,更重要的是本机支持。我有一些northwind database benchmarks available比较可用的不同序列化程序之间的大小和速度。在基类库中,Microsoft的XML DataContract序列化器比其JSON序列化器快 30%。虽然这更多地与微软在XML序列化程序中所做的努力有关,因为我能够开发出比其XML更快 2.6x JsonSerializer。至于基于基准测试的有效负载,看起来XML大约是 2x JSON的大小。但是,如果您的XML有效负载在同一文档中使用了许多不同的命名空间,那么这很快就会爆发。

答案 16 :(得分:2)

在大多数情况下,XML是臃肿的蛇油。 JSON为您提供了大部分优势,而且没有膨胀。

答案 17 :(得分:1)

除了这里提到的优点之外的一个主要优点。 对于相同的数据,有多种方法可以将其表示为XML文件,但只有一种方式使用JSON,消除了歧义:)

答案 18 :(得分:0)

到目前为止,我不是专家,但是从我工作的各个公司来看,我们通常在小型数据环境或配置值中使用XML(web.config就是一个很好的例子)。

当您拥有大量数据时,通常需要报告该数据。而XML并不是报告的重要来源。在宏观方案中,似乎事务数据库比XML更容易报告/搜索。

这有意义吗?正如我上面所说,我不是专家,但根据我的经验,情况似乎如此。此外,我相信Microsoft集成了JSON支持,因为开发人员转向客户端或脚本操作以增强UI的视觉效果(Ajax),并且Microsoft的Ajax没有像其他库一样被使用由于jQuery与可序列化对象的完美集成,jQuery和MooTools(雅虎的YUI也在混合中)。

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