JSON和XML:不可同日而语

【编者按】本文做者 Yegor Bugayenko 是 Teamed.io 公司的联合创始人,在软件质量和工程管理方法领域有深刻的研究。本文中,做者经过对比 JSON ,向你们更详细地阐述了 XML 的四大特性,帮助你们在搭建项目时选择适合的数据格式类型。html

不少人都在内心纠结,若是 JSON 和 XML 相比,谁更好谁更快?在接下来的新项目中到底选择哪个?别傻了!彻底没有可比性。就像自行车和 AMG S65 ,你能说哪一个更好吗?虽然二者都是交通工具,但有些状况下,自行车反而更便捷。因此 JSON 和 XML 也同样,它们都各有所长,彻底没有必要进行比较。java

下面举一个简单的 JSON 数据(140个字符):json

{
  "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 中能完美解析。因此,咱们即可以简单粗暴地放弃 XML 选择 JSON 了吗?谁还会须要已历时15年的重量级语言呢?框架

但偏偏相反,本人就很是喜好 XML ,且听下文分解。工具

但千万别误会,本文并非在反对 JSON 。 JSON 的确是很好的数据格式,但它仅仅只是一种数据格式,常常被临时用于将数据从 A 点传到 B 点。它比 XML 更简短易读,但仅此而已。性能

XML 是一种很是强大的语言,而非只是单纯的数据格式。相对于 JSON 和其余简单的数据格式来讲,如 YAML ,XML 至少有如下四个重要特性。测试

  • XPath

为了从文档中获得上文相似的出版年份,只须要发送一个简单的 XPath 请求:/book/published/year/text() 。可是,必须得有一个 XPath 处理器来解析请求并返回2004。好就好在 XPath2.0是集 functions、predicates、axes 等为一体的强大检索引擎,在不用 Java 代码编写任何遍历的逻辑的状况下,就能够在 XPath 请求中以天然语言形式加入任何逻辑,例如,你能够直接发出请求 “How many books were published by David West in 2004?” ,便能经过 XPath 获得答案。而这是 JSON 所不能作到的。spa

  • Attributes and Namespaces

能够将 metadata 加到 XML 数据中,正如上面的 id 属性同样。数据保存在元素中,例如图书做者的姓名,而 metadata(数据的数据)应该保存为属性,这会大大有利于组织和结构化信息。最重要的是,元素和属性均可以标记为属于某个 namespaces ,当多个应用使用同一 XML 文档时,这种技术的优点会很是明显。设计

  • XML Schema

试想这样的状况,当你在一台机器上建立了 XML 文档,在其余电脑上作了数次修改,而后又传到别的电脑上使用,因此必须确保文档结构没有被中间操做所破坏。好比可能有人用 保存出版日期,但别人又可能使用 ISO-8601 格式的 。为了不这样的结构混乱,咱们能够建立一个说明文档 XML Schema ,和主文档一块儿进行保存。在每次操做主文档以前,都须要经过 schema 文件检查其正确性,这是生产过程当中的一种集成测试。 RelaxNG 也是相似的机制,但会简单不少,若是以为 XML Schema 太过复杂不妨尝试用 RelaxNG。

  • XSL

事实上,能够不用任何 Java/Ruby 等代码就能完成 XML 文档的修改。简单的说,你只须要建立一个 XSL transformation 文档并将其应用于原始 XML ,而后获得一个新的 XML 。 XSL 语言(纯功能性语言)是专为分层数据操做设计的,它比 Java 或任何其余面向对象/过程的语言都更适合这一任务。借助 XSL 能够将 XML 转换为任何形式,包括纯文本和 HTML 。不少人抱怨 XSL 太复杂,但其实没那么难, XSL 的核心功能其实很简单,你们不妨一试。

以上所述并非 XML 的所有特征,但这四大特性的确用途非凡。它们不只可让文档的“自给自足”,还能进行自我验证(XML Schema),进而知道如何修改(XSL),最后还能方便地得到其中的文档内容(Xpath)。

同时,市面上还有不少以 XML 为基础发展的语言、标准和应用,包括 Xforms、 SVG、 MathML、 RDF、 OWL、 WSDL 等。但通常的主流项目中都不会用到,由于它们的针对性都太强。

设计 JSON 的用途并不是是知足以上特性,尽管 JSON 领域如今努力尝试,包括用于查询的 JSONPath 、一些转换工具和用于验证的 json-schema ,但和强大的 XML 相比这只是微不足道的模仿,笔者并不认为会有长远发展,并且早晚会消失殆尽。

综上所述, JSON 是一种没有过多附加功能的简单数据格式,其最佳的使用状况是在 AJAX 下,除此以外,本人都强烈推荐你们使用 XML。

(编译自:https://dzone.com/articles/stop-comparing-json-and-xml

OneAPM 为您提供端到端的 Java 应用性能解决方案,咱们支持全部常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本缘由。分钟级部署,即刻体验,Java 监控历来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

相关文章
相关标签/搜索