还在比较JSON和XML?Stop!
2015-12-01 10:00:09 | 来源:玩转帮会 | 投稿:佚名 | 编辑:小柯

原标题:还在比较JSON和XML?Stop!

本文由玩赚乐(www.banghui.org)– 小峰原创翻译,转载请看清文末的转载要求,欢迎加入技术翻译小组!

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

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

下面是一个简单的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是另一种类似但更简单的机制:如果你觉得XMLScheme太复杂的话,也可以试试这个。
  • 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。

译文链接:
英文原文:Stop Comparing JSON and XML
翻译作者:玩赚乐(www.banghui.org)– 小峰
[转载必须在正文中标注并保留原文链接、译文链接和译者等信息。]

tags:

上一篇  下一篇

相关:

穿衣搭配喜欢简约风?这个23岁姑娘的博客值得一看

来自纽约布鲁克林区的 Jessi Frederick 从 2012 年开始运营自己的博客,虽然她称之为“I’m not a blogger

啊,你闻起来就像我外婆收藏的《不列颠百科全书》

不知道你是否对书本的味道情有独钟。最近,纽约的香水品牌Demeter 就推出了一款名为Paperback的书香味香水

喜欢亚文化吗?请关注这个展,以及它背后的独立摄影平台

本文由 Coolhunting 授权《好奇心日报》发布,即使我们允许了也不许转载。 独立摄影节(Independent Photo

那些大牌设计师在说他们的缪斯时究竟在说什么?

那些大牌设计师们往往会对公众提到自己的缪斯。缪斯就是拉丁语中的Muses,根据维基百科中的解释,“是希腊

那个做出了《红警》的工作室,在解散12年后又被纪念了一回

虽然离每年最重要的游戏游戏颁奖礼 The Game Award 正式开始还有 3 天,但其中一个重要奖项 Industry Icon

都追过的·总觉得《数码宝贝》片头曲《Butter-Fly》特别戳

【催泪向 MAD】butter-fly (主 MIX) 【数码宝贝】 无限大な梦のあとの 何もない世の中じゃ
そうさ爱しい

大数据来了,传统的会计感到职业生涯有些黯淡

现在全世界都在谈互联网思维,就是传统行业老大也要来个互联网 +,不然就是土鳖,就会让潮流淹没。这种观念

顶级的产品经理是需要做到万能么?

“顶级的产品经理是:没有工程师我自己来,没有销售我自己来,没有设计师我自己来,没有推广运营我还是自

产品经理究竟有多重要?

前段时间看到一篇文章,里面有一段话:之前有国内一位Top级的CTO一直吐槽产品经理,对产品经理不以为然,觉

为什么你把项目管理的书看完了还是不能带好一个团队?

相信我们每个人都渴望自己所处的团队能够进行更好的协作。现在的技术无疑可以帮助我们更好的实现这一点,但

站长推荐: