我认为XML非常便携,可以用作迷你数据库.我见过无处不在的XML.我甚至看到大公司转向JSON.甚至微软也集成了对JSON的支持.什么是对JSON的炒作?
基本上因为JSON本身是由JavaScript识别的,它实际上是轻量级,简约和高度可移植的,因为它只依赖于两个基本结构:
名称/值对的集合.在各种语言中,这被实现为对象,记录,结构,字典,散列表,键控列表或关联数组.
有序的值列表.在大多数语言中,这被实现为数组,向量,列表或序列.
在您开始将不同的命名空间模式混合在一起之前,XML并没有真正开始发挥作用.然后你看到JSON开始倒下,但是如果你只需要数据的序列化格式,那么JSON比XML更小,更轻,更人性化,并且通常比XML更快.
我发现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,我必须决定是否做元素或属性.以下两个都是有效的:
5 8.5 yes deep and steep! deep and steep!
因此,我不仅要考虑我可能想要发送给客户端的数据,我还要考虑如何格式化它.XML虽然比简单的SGML更简单,但是通过更严格的规则,仍然提供了太多的方法来思考这些数据.然后我将不得不去生成它.我不能只拿一个Python字典(或其他简单的数据结构)并说"自己动手做我的XML".我无法接收XML文档并立即说"不必编写自定义解析器",或者不需要XML Schema/Relax NG和其他此类痛苦的额外开销.
缺点是,将数据编码和解码为JSON更加容易和直接,特别是对于快速交换.这可能更适用于来自动态语言背景的人,因为内置于JavaScript/JSON的基本数据类型(列表,词典等)直接映射到Python,Perl,Ruby等中相同或相似的数据类型.
对于大多数用例,JSON的性能与XML没有太大的不同,JSON对于深度嵌套结构来说不太适合和可读......你会遇到]]]}],这会使调试变得困难
与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:
red #f00 green #0f0 blue #00f cyan #0ff magenta #f0f yellow #ff0 black #000
只是我个人经历的轶事:
我编写了一个小的Javascript目录,首先使用XML格式的数据,然后对其进行调整以使用JSON,这样我就能并排运行它们并与Firebug进行速度比较.JSON最终快了大约3倍(350-400 ms与1200-1300 ms以显示所有数据).此外,正如其他人所指出的那样,JSON在眼睛上更容易,并且由于更精简的标记,文件大小减小了25%.
使用属性,XML很不错.但由于某种原因,自制的XML通常100%由元素组成,而且很难看.
JavaScript轻松消费可能是原因之一..
JSON最适合从Web服务中获取Web应用程序中的数据,因为它的大小和易用性,特别是由于JavaScript中的内置支持.想象一下,与JSON中的即时查找相比,解析xml片段的计算开销.
一个很好的例子是JSON-P.您可以从回调函数调用中包含的Web服务中获取数据,例如my_callback({"color": "blue", "shape":"square"});
在动态生成的标记内,以便可以在函数中直接使用数据
my_callback()
.使用XML无法接近这种便利.
XML将是大型文档的首选格式,您可以使用XSLT以多种格式呈现数据页面.XML还可以与应用程序配置文件一起使用,以便在许多其他用途中使用.
这里没有人提到XML的主要优势:验证规则(DTD,XSD).我的结论,使用了两个:
JSON非常适合ajax,特别是如果您自己开发服务器端和客户端端.您基本上可以在服务器脚本中创建js对象!
当您必须在大型官僚组织之间设置数据交换标准时,XML在企业环境中闪耀.通常情况下,一方在几个月之前就开发了它的部分,因此它确实可以从对商定的XSD的请求进行验证中获益.此外,在大公司中,数据传输通常在不同系统之间进行转换.这也是XML的优势,想想XSLT.示例:无代码转换为JSON:p
当然,正在开发json-schema,但你不会在任何地方找到它的内置支持.
我是两者的狂热者,他们有不同的优势.
既然大多数语言都有JSON编码器和解码器,那么没有理由不将JSON用于有意义的用途(这可能是XML的90%用例).
我甚至听说过在大型SQL数据库中使用JSON字符串来简化架构更改.
JSON与JavaScript编程没有阻抗不匹配.JSON可以包含整数,字符串,列表,数组.XML只是元素和节点,需要在被消耗之前解析为整数等等.
老实说,JSON和XML之间并没有那么多,因为它们可以代表所有类型的数据.但是,XML在语法上比JSON更大,并且使它比JSON更重.