【编者按】本文作者 Yegor Bugayenko 是 Teamed.io 公司的联合创始人,在软件质量和工程管理方法领域有深入的研究。本文中,作者通过对比 JSON ,向大家更详细地阐述了 XML 的四大特性,帮助大家在搭建项目时选择适合的数据格式类型。
很多人都在心里纠结,如果 JSON 和 XML 相比,谁更好谁更快?在接下来的新项目中到底选择哪一个?别傻了!完全没有可比性。就像自行车和 AMG S65 ,你能说哪个更好吗?虽然两者都是交通工具,但有些情况下,自行车反而更便捷。所以 JSON 和 XML 也一样,它们都各有所长,完全没有必要进行比较。
下面举一个简单的 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 中能完美解析。所以,我们便可以简单粗暴地放弃 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 所不能做到的。
- 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 官方博客
相关推荐
JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛使用的数据交换格式,它们在互联网上用于传递和存储结构化数据。JSON以其简洁、易读的特性受到开发者喜爱,而XML则以其丰富的结构...
在实际开发中,往往会有现成的库,如`xml2json`和`json2xml`,可以帮助我们更方便地进行这些转换。在提供的`xml2json-json2xml-master`压缩包中,可能包含了这些库的源代码,你可以查看它们是如何实现这些功能的。...
- XML转JSON: ```java import net.sf.json.JSON; import net.sf.json.xml.XMLSerializer; // ... String xmlString = "<person><name>John</name><age>30</age></person>"; JSON jsonObject = (JSON) new ...
在现代软件开发中,数据交换通常涉及JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)这两种格式,它们是网络传输数据的标准格式。JSON因其简洁和易读性而广泛应用于API接口,而XML则在更...
JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛使用的数据交换格式,它们在Web服务和应用程序之间传输数据时起到至关重要的作用。jQuery是一个流行的JavaScript库,它简化了DOM...
3. 返回JSON:递归结束后,得到的是一个代表XML结构的JavaScript对象,可以使用`JSON.stringify()`将其转换为JSON字符串。 JSON转XML的步骤类似: 1. 解析JSON:使用`JSON.parse()`将JSON字符串转换为JavaScript...
就可读性和可扩展性而言,JSON 和 XML 不相上下。但是,JSON 略比 XML 简单,要写好 XML 最好还是借助 XML 编辑器,标签的嵌套和配对手动输入来说容易出错。 编码难度 从编码难度而言,JSON 略比 XML 简单。JSON 的...
在IT行业中,数据交换和存储经常涉及两种常见的数据序列化格式:JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)。JSON以其简洁、易读性而被广泛用于Web服务,而XML则因其丰富的结构和强大...
在IT行业中,数据交换和存储经常需要在不同的格式之间转换,比如JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)。本教程将详细讲解如何在Delphi环境中实现JSON与XML之间的转换,这对于软件...
2. XML:XML是一种可扩展的标记语言,用于存储和传输结构化数据。与HTML不同,XML标签没有预定义的含义,需要用户自定义。在Java中,处理XML通常使用DOM(Document Object Model)、SAX(Simple API for XML)或StAX...
- JQuery - jquery.json2xml.js - jquery.xml2json.js 2. XML 字符串转换成 JSON 对象 $.xml2json(str); 3. JSON 对象转换成 XML 字符串 $.json2xml(obj);
NSLog(@"Error creating JSON: %@", error.localizedDescription); } ``` Swift中,使用`JSONSerialization`的`string(withJSONObject:options:)`方法: ```swift if let jsonString = try? JSONSerialization...
print("Error parsing JSON: \(error.localizedDescription)") } } ``` 对于XML解析,iOS中没有内置的解决方案,但可以使用第三方库,如SWXMLHash,它提供了一个简洁的API来处理XML数据: ```swift let xml = ...
1. 解析JSON:将JSON字符串解析为数据结构,如Python中的字典或列表。 2. 构建XML树:根据JSON数据结构创建相应的XML元素树。每个JSON对象转换为XML元素,每个键成为元素的属性或子元素,每个值成为元素的文本或子...
JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛使用的数据交换格式,它们在Web服务和应用程序之间传输数据时起到至关重要的作用。"json和xml互转.jar"是一个Java应用程序,其...
在Java开发中,XML(可扩展标记语言)和JSON(JavaScript Object Notation)是两种常见的数据交换格式。它们各自有着不同的特性和应用场景,但有时我们需要将XML数据转换为JSON,或者将JSON数据转换为XML,以满足...
val json: JsValue = Json.fromJsonXml(xml) ``` 4. **处理复杂结构**:如果JSON或XML包含嵌套的结构,`play-json-xml`会递归地处理这些嵌套。例如,如果你有一个包含嵌套JSON对象的`JsValue`,转换成XML后,这些...
JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛使用的数据交换格式,它们在处理结构化数据时各有优势。JSON因其简洁明了和易于阅读的特性,通常用于网络服务间的轻量级数据交互...
- **XML(Extensible Markup Language)**: 可扩展标记语言,是一种用于标记数据的标记语言,主要用于存储和传输数据。XML具有良好的结构化特性,使得它非常适合用来表示复杂的数据结构。 - **JSON(JavaScript ...
- 验证:XML支持DTD(文档类型定义)和XML Schema,可以对数据进行验证,而JSON没有内置验证机制。 5. 实际应用: - 在Web服务中,JSON常用于API数据交互,因为它传输速度快且易于解析。 - XML常用于企业级应用...