本文由玩赚乐(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)– 小峰
[转载必须在正文中标注并保留原文链接、译文链接和译者等信息。]
I 相关 / Other
来自纽约布鲁克林区的 Jessi Frederick 从 2012 年开始运营自己的博客,虽然她称之为“I’m not a blogger
不知道你是否对书本的味道情有独钟。最近,纽约的香水品牌Demeter 就推出了一款名为Paperback的书香味香水
本文由 Coolhunting 授权《好奇心日报》发布,即使我们允许了也不许转载。 独立摄影节(Independent Photo
那些大牌设计师们往往会对公众提到自己的缪斯。缪斯就是拉丁语中的Muses,根据维基百科中的解释,“是希腊
虽然离每年最重要的游戏游戏颁奖礼 The Game Award 正式开始还有 3 天,但其中一个重要奖项 Industry Icon