虽然 XML 支持 命名空间(namespace)与 前缀(prefix),但这不代表 JSON 没有处理命名冲突的能力 。比起 XML 的前缀,它处理命名冲突的方式更简洁,在程序中的处理也更自然 。在 JSON 里,每一个对象都在它自己的命名空间中,因此不同对象内的元素名称可以随意重复 。在大多数编程语言中,不同的对象中的成员可以包含相同的名字,所以 JSON 根据对象进行名称区分的规则在处理时更加自然 。
也许 JSON 比 XML 更优的部分是因为 JSON 是 JavaScript 的子集,所以在 JavaScript 代码中对它的解析或封装都非常的自然 。虽然这看起来对 JavaScript 程序非常有用,而其他程序则不能直接从中获益,可实际上这一问题已经被很好的解决了 。现在 JSON 的网站的列表上展示了 64 种不同语言的 175 个工具,它们都实现了处理 JSON 所需的功能 。虽然我不能评价大多数工具的质量,但它们的存在明确了开发者社区拥抱 JSON 这一现象,而且它们切实简化了在不同平台使用 JSON 的难度 。
二者的动机
简单地说,XML 的目标是标记文档 。这和 JSON 的目标想去甚远,所以只要用得到 XML 的地方就尽管用 。它使用树形的结构和包含语义的文本来表达混合内容以实现这一目标 。在 XML 中可以表示数据的结构,但这并不是它的长处 。
JSON 的目标是用于数据交换的一种结构化表示 。它直接使用对象、数组、数字、字符串、布尔值这些元素来达成这一目标 。这完全不同于文档标记语言 。正如上面说的那样,JSON 没有原生支持 混合内容(mixed content)的记录 。
软件
这些主流的开放 API 仅提供 XML: 亚马逊产品广告 API(Amazon Product Advertising API) 。
这些主流 API 仅提供 JSON: 脸书图 API(Facebook Graph API)、 谷歌地图 API(google Maps API)、 推特 API(Twitter API)、AccuWeather API、Pinterest API、Reddit API、Foursquare API 。
这些主流 API 同时提供 XML 和 JSON: 谷歌云存储(Google Cloud Storage)、 领英 API(Linkedin API)、Flickr API 。
根据 可编程网络(Programmable Web) 9 的数据,最流行的 10 个 API 中只有一个是仅提供 XML 且不支持 JSON 的 。其他的要么同时支持 XML 和 JSON,要么只支持 JSON 。这表明了大多数应用开发者都更倾向于使用支持 JSON 的 API,原因大概是 JSON 更快的处理速度与良好口碑,加之与 XML 相比更加轻量 。此外,大多数 API 只是传递数据而非文档,所以 JSON 更加合适 。例如 Facebook 的重点在于用户的交流与帖子,谷歌地图则主要处理坐标和地图信息,AccuWeather 就只传递天气数据 。总之,虽然不能说天气 API 在使用时究竟是 JSON 用的多还是 XML 用的多,但是趋势明确偏向了 JSON 。10 11
这些主流的桌面软件仍然只是用 XML:Microsoft word、Apache Openoffice、LibraOffice 。
因为这些软件需要考虑引用、格式、存储等等,所以比起 JSON,XML 优势更大 。另外,这三款程序都支持混合内容,而 JSON 在这一点上做得并不如 XML 好 。举例说明,当用户使用 Microsoft Word 编辑一篇论文时,用户需要使用不同的文字字形、文字大小、文字颜色、页边距、段落格式等,而 XML 结构化的组织形式与标签属性生来就是为了表达这些信息的 。
这些主流的数据库支持 XML:IBM DB2、Microsoft SQL Server、Oracle Database、PostgresSQL、BaseX、eXistDB、MarkLogic、MySQL 。
这些是支持 JSON 的主流数据库:MongoDB、CouchDB、eXistDB、Elastisearch、BaseX、MarkLogic、OrientDB、Oracle Database、PostgreSQL、Riak 。
在很长一段时间里,SQL 和关系型数据库统治着整个数据库市场 。像 甲骨文(Oracle)和 微软(Microsoft)这样的软件巨头都提供这类数据库,然而近几年 NoSQL 数据库正逐步受到开发者的青睐 。也许是正巧碰上了 JSON 的普及,大多数 NoSQL 数据库都支持 JSON,像 MongoDB、CouchDB 和 Riak 这样的数据库甚至使用 JSON 来存储数据 。这些数据库有两个重要的特性是它们适用于现代网站:一是它们与关系型数据库相比 更容易扩展(more scalable);二是它们设计的目标就是 web 运行所需的核心组件 。12 由于 JSON 更加轻量,又是 JavaScript 的子集,所以很适合 NoSQL 数据库,并且让这两个品质更容易实现 。此外,许多旧的关系型数据库增加了 JSON 支持,例如 Oracle Database 和 PostgreSQL 。由于 XML 与 JSON 间的转换比较麻烦,所以大多数开发者会直接在他们的应用里使用 JSON,因此开发数据库的公司才有支持 JSON 的理由 。(LCTT 译注:NoSQL 是对不同于传统的关系数据库的数据库管理系统的统称 。参考来源 ) 13
未来
对互联网的种种变革中,最让人期待的便是 物联网(Internet of Things)(IoT) 。这会给互联网带来大量计算机之外的设备,例如手表、温度计、电视、冰箱等等 。这一势头的发展良好,预期在不久的将来迎来爆发式的增长 。据估计,到 2020 年时会有 260 亿 到 2000 亿的物联网设备被接入互联网 。14 15 几乎所有的物联网设备都是小型设备,因此性能比笔记本或台式电脑要弱很多,而且大多数都是嵌入式系统 。因此,当它们需要与互联网上的系统交换数据时,更轻量、更快速的 JSON 自然比 XML 更受青睐 。16 受益于 JSON 在 web 上的快速普及,与 XML 相比,这些新的物联网设备更有可能从使用 JSON 中受益 。这是一个典型的梅特卡夫定律的例子,无论是 XML 还是 JSON,抑或是什么其他全新的格式,现存的设备和新的设备都会从支持最广泛使用的格式中受益 。
推荐阅读
- JSON 的兴起与崛起
- 大麦茶养生妙用
- 风水罗盘的使用与实战技巧 风水罗盘使用
- 汽车保险常识与选择
- 庐山云雾茶的功效与作用
- 高山茶的功效与作用,高山茶适合什么人喝?
- 四川高山茶有哪些?高山茶的功效与作用
- 罗布麻茶的功效与副作用
- 六堡茶的功效与作用?
- 富硒茶的功效与作用