我认为XML非常便携,可以用作迷你数据库。我见过无处不在的XML。我甚至看到大公司转向JSON。甚至微软也集成了对JSON的支持。什么是对JSON的炒作?
答案 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-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个星期。我实际上感谢微软整合它,因为没有它,我将不得不写出相当多的额外代码。