JSON 还是 XML?哪一个更好?哪一个更快?接下来的项目我该用哪一个?STOP!它们之间没有任何可比性。就像比较自行车和奔驰S65 AMG,你说,哪一个更好?它们都是交通工具,都可以让你从家里移动到办公室,对吧?在有些情况下,自行车或许还更快点。但这是否意味着它们就可以相互比较?明显不行!这个道理同样适用于JSON和XML。它们有着各自不同的适用范围,它们是两码事。

JSON是很好的数据格式,不过它仅仅只是一种数据格式

The Men Who Stare at Goats (2009) by Grant Heslov

下面是一个简单的JSON数据片段(140个字符):

{
  "id": 123,
  "title": "Object Thinking",
  "author": "David West",
  "published": {
    "by": "Microsoft Press",
    "year": 2004
  }
}

在XML中可能就是这样的(167个字符):

<?xml version="1.0"?>
<book id="123">
  <title>Object Thinking</title>
  <author>David West</author>
  <published>
    <by>Microsoft Press</by>
    <year>2004</year>
  </published>
</book>

看起来很容易比较?第一个例子更短,更容易理解,因为它比较不那么“高冷”,并且能在JavaScript中完全解析。那么,是不是JSON更好,XML正在逐渐走向灭亡呢?!还有谁需要这个重量级的已经历经15载春秋的XML?

我,我需要它,我喜欢它。原因么,且听我慢慢道来。

首先不要误会我的意思:我不反对JSON,一点也不。这是一个很好的数据格式。不过它只是一种数据格式。我们会临时使用它从点A传送一段数据到点B。的确,它比XML更短,更易读短。但是仅此而已。

XML不是数据格式,它是一种语言。一种非常强大的语言。下面我要告诉你它的厉害之处,告诉你为什么我如此深爱着它。同时,我强烈推荐你阅读Elliotte Rusty Harold和W. Scott Means写的《XML in a Nutshell第三版》。

我认为XML有4个功能让它有别于JSON或其他简单的数据格式,例如YAML。

  • XPath。为了从上面的文档中获得类似出版年份的数据,我只要发送XPath查询即可:/book/published/year/text()。但是,必须得有一个能够理解请求,并返回2004的XPath处理器。这样做的好处是,XPath 2.0是一个非常强大的查询引擎,有它自己的函数、谓词和坐标轴等,你可以照字面意思把任何逻辑放到XPath要求中,而无需使用,例如Java,编写任何逻辑。你可以这么问“How many books were published by David West in 2004?(David West 2004年出版了多少书)”,直接通过XPath就可以得到答案。而 JSON望尘莫及。
  • 属性和命名空间。你可以将元数据加入到你的数据中,就像上面使用id属性那样。数据保持在元素,例如这本书的作者的内部,而元数据(关于数据的数据),可以且应该置于属性中。这大大有助于组织和结构化信息。最重要的是,元素和属性都可以被标记为属于特定的命名空间。这在若干个应用程序工作于同一个XML文档的时候非常有用。
  • XML Scheme。当你在这里创建了一个XML文件,又在其他地方修改了几次,然后将其传输到另一个地方的时候,你要确保它的结构不受任何这些行动的破坏。其中一个文件可能使用<year>存储发布日期,另一个则使用<date>符合ISO-8601。为了避免结构混乱,不妨创建一个补充文件,这就是所谓的XML Scheme,并和主文档一起发布。任何想要工作于主文档的人首先会使用提供的scheme来验证其正确性。这是一种生产集成测试。 RelaxNG是另一种类似但更简单的机制:如果你觉得XML Scheme太复杂的话,也可以试试这个。
  • XSL。无需任何Java /Ruby/等代码,你也可以修改XML文档。只要创建一个XSL 转换文档并“应用”到你的原始XML即可。然后你就会得到一个新的XML文档。XSL语言(顺便说一句,这是纯函数式的)是专为分层数据操作而设计的。所以,它比Java或任何其他OOP /程式方法都要适合这项任务。你可以将XML文档转换成包括纯文本和HTML在内的任何东西。有些人抱怨说XSL过于复杂,但请先试一试。你不需要掌握所有内容,而且它的核心功能非常直截了当。

其他还有,此列表并不完整,但是这四个功能助我良多。它们使得我的文档能够“自给自足”。它可以验证自己(XML Scheme),它知道如何修改自己(XSL),它还允许我很方便地访问里面的任何东西(XPath)。

还有很多语言、标准和应用是围绕XML开发的,包括XForms、SVG、MathML、RDF、OWL、WSDL等,不过在主流项目中你可能不大使用它们,因为它们比较“小众化”。

JSON就没有设计这些功能,即使其中有些正试图在JSON世界中找到自己的定位,如用于查询的JSONPath,用于转换的“some tools”,还有用于验证的JSON-Scheme。但相比XML提供的工具,它们只能算是无力又拙劣的模仿,我不认为它们能够化腐朽为神奇。或者可以这么说:它们灭亡是迟早的事。它们将一种既不错又简单的格式弄得乱七八糟面目全非。

因此,我们得出结论,JSON是一种没有额外功能的简单的数据格式。它的最佳使用案例是AJAX。在其他情况下,我强烈建议你使用XML。

你可能感兴趣的内容
JSON简介以及用法代码汇总 收藏,2069 浏览
0条评论

dexcoder

这家伙太懒了 <( ̄ ﹌  ̄)>
Owner