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

Luk*_*101 155 xml jquery json

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

CMS*_*CMS 226

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

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

  • +1,特别是因为与XML解析相比,JSON解析的效率要高得令人难以置信,甚至是分段式的.一旦您关心的数据集超过某个(并且非常小)阈值,性能差异就会显着. (48认同)
  • +1 ..真的..与原始xml文本相比,这么多不同的数据类型支持很多事情 (3认同)

jcd*_*yer 136

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

  • +1用于显示XML真正有用的内容.人们常常使用XML,即使他们可以使用更简单的东西. (31认同)
  • XML如何不易读取,我发现几乎不可能读取json,我认为XML的层次结构更容易理解(当然有点罗嗦).也许我对JSON的工作还不够 (3认同)

小智 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
Run Code Online (Sandbox Code Playgroud)

当通过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>
Run Code Online (Sandbox Code Playgroud)

因此,我不仅要考虑我可能想要发送给客户端的数据,我还要考虑如何格式化它.XML虽然比简单的SGML更简单,但是通过更严格的规则,仍然提供了太多的方法来思考这些数据.然后我将不得不去生成它.我不能只拿一个Python字典(或其他简单的数据结构)并说"自己动手做我的XML".我无法接收XML文档并立即说"不必编写自定义解析器",或者不需要XML Schema/Relax NG和其他此类痛苦的额外开销.

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


小智 34

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


Ron*_*man 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"
      }
 ]
Run Code Online (Sandbox Code Playgroud)

到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>
Run Code Online (Sandbox Code Playgroud)

  • 不仅更小,而且更人性化.XML看起来像是人类像计算机一样说话的不良尝试. (23认同)
  • 您的XML还可以减少XML属性而不是简单类型的元素(名称/值) (15认同)
  • @Matthew:是的,但那看起来不一致和丑陋.而且你仍然需要元素的开/关标签.JSON(充其量)将需要使用的标记数量减半. (4认同)
  • 看看Marc的例子.我不知道你的版本比他的版本更容易阅读.http://stackoverflow.com/questions/1743532/why-is-everyone-choosing-json-over-xml-for-jquery/1743664#1743664 (2认同)

Nat*_*e B 28

只是我个人经历的轶事:

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

  • 如果每个人都创造了这些基准,我们就没有什么可争论的了. (2认同)

小智 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>
Run Code Online (Sandbox Code Playgroud)

使用属性,XML很不错.但由于某种原因,自制的XML通常100%由元素组成,而且很难看.

  • 可能因为复杂类型实际上只能在元素中描述,所以大多数工具都是默认的.我同意这个XML使用和阅读非常简单. (4认同)
  • 与JSON示例相比,非空白字符仍然更多。而且在XML中解析属性可能更令人讨厌。 (2认同)

Xin*_*nus 18

JavaScript轻松消费可能是原因之一..

  • 这是我使用它的重要原因.手动解析xml非常复杂.此外,由于我首先使用Python来创建JSON,它们以非常类似的方式处理数据和对象,这意味着来回序列化使一切都快乐! (6认同)

Joy*_*tta 10

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

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

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


A.P*_*.P. 8

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

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

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

我是两者的狂热者,他们有不同的优势.


Nos*_*dna 6

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

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


Chr*_*ian 5

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

  • 阻碍不匹配是指概念不能从一种格式干净地映射到另一种格式,就像对象关系映射一样.有些东西很容易用对象表达,但很难用SQL编写,而其他东西很容易使用SQL表达,但是对象层次结构很难清楚地表达它们.使用XML和JSON,通常需要更多的工作来获得意义而不是另一个,但这实际上取决于解析工具.表达性(大部分)是相同的. (9认同)

Jas*_*Cav 5

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