选 JSON 还是 XML 这个问题,答案不是"JSON 完胜"。在 SVG、SOAP、企业级系统集成、办公文档这些领域,XML 仍然是默认选择。在 Web API、配置文件、NoSQL 数据库里,JSON 几乎垄断。区别不在于哪个"更好",而在于哪个生态、工具链和约束更适合你的项目。
这篇对比两者的格式、能力、典型场景,帮你在两者之间做出明确选择。
格式对比
JSON 例子
{
"user": {
"id": 42,
"name": "Alice",
"email": "alice@example.com",
"roles": ["admin", "editor"],
"active": true
}
}
XML 例子(同样的数据)
<user id="42" active="true">
<name>Alice</name>
<email>alice@example.com</email>
<roles>
<role>admin</role>
<role>editor</role>
</roles>
</user>
JSON 版本约 110 字节,XML 版本约 200 字节。XML 多出来的开销主要在标签和闭合标签上。
能力对比
| 能力 | JSON | XML |
|------|------|-----|
| 注释 | 不支持(标准) | 支持 <!-- --> |
| Schema 校验 | JSON Schema(后补) | XSD(成熟) |
| 查询语言 | JSONPath / jq(后补) | XPath(成熟) |
| 命名空间 | 无 | 有(xmlns) |
| 属性 vs 元素 | 只有键值对 | 区分属性和子元素 |
| 数组 | 原生支持 | 需要重复元素 |
| 二进制字段 | 需要 Base64 | 需要 Base64 |
| 流式解析 | 有限(需 streaming parser) | 原生支持(SAX) |
| JavaScript 兼容 | 原生(JSON.parse) | 需要 DOMParser |
| 体积 | 紧凑 | 冗长 |
XML 的属性(attribute)和元素(element)的区分有时是优点,能区分"元数据"和"数据",但更多时候让建模纠结。
JSON 的优势
1. 体积小,传输快
同样信息,JSON 通常比 XML 小 30%-60%。在移动 API 和带宽敏感场景,这是硬指标。
2. JavaScript 原生
浏览器和 Node.js 一行 JSON.parse 完事,配一个 JSON Formatter 查看结果更方便。XML 要 DOMParser 然后像操作 DOM 一样遍历,代码量大几倍。
3. 数据结构直观
对象、数组、值,三种基本结构覆盖 99% 数据建模需求。XML 的"属性 vs 子元素"决策没有统一答案。
4. 工具链广泛
所有 NoSQL 数据库(MongoDB、CouchDB)、所有主流 API 格式(REST、GraphQL 内部)、所有前端状态管理(Redux、Zustand)都基于 JSON。
XML 的优势
1. 成熟的 Schema 校验
XSD(XML Schema Definition)能精确约束结构、数据类型、引用关系。JSON Schema 后期才补上,工具链成熟度远不及 XSD。在金融、医疗、政府这些需要严格契约的行业,XSD 是硬性要求。
2. XPath 和 XSLT
XPath 让你用类似 /users/user[@active='true']/email 的表达式精确查询 XML 节点。XSLT 把 XML 转换成其他格式(HTML、PDF、其他 XML)。JSON 没有同等成熟的等价物。
3. 流式解析(SAX)
XML SAX 解析器按事件触发(开始标签、字符数据、结束标签),可以处理 GB 级 XML 文件而不占大量内存。JSON 流式解析器存在但远不如 SAX 普遍。
4. 命名空间
XML 的 xmlns 解决了不同领域词汇冲突的问题。SOAP、XHTML、SVG 都靠命名空间组合不同词表。JSON 没有原生命名空间支持。
"XML 已死"是个误读
XML 在 Web API 领域确实输给 JSON,但在以下领域仍然是标准:
- SVG:矢量图格式,所有现代浏览器原生支持
- SOAP:企业级 Web 服务,银行、保险、政府系统大量使用
- 办公文档:docx、xlsx、pptx 本质都是 OOXML(XML 的 zip 包)
- 配置:Maven、Spring、Android layout、Web.config 都是 XML
- 出版业:DITA、DocBook 用于技术文档和图书排版
- 公文传输:电子发票、电子签章、行业监管报文都基于 XML
如果你的项目跟以上任何一个领域对接,XML 不是选择,是必须。
YAML:第三种选择
user:
id: 42
name: Alice
email: alice@example.com
roles:
- admin
- editor
active: true
YAML 比 JSON 更紧凑,支持注释。但 YAML 的解析器复杂度远高于 JSON,缩进敏感容易出错。适合人类手写配置(Docker Compose、CI/CD、Kubernetes),不适合 API 数据传输。
决策指南
| 场景 | 推荐 | |------|------| | Web API 响应 | JSON | | 前端配置 | JSON | | NoSQL 文档存储 | JSON | | REST / GraphQL | JSON | | 移动端数据交换 | JSON | | SOAP Web 服务 | XML | | 矢量图 | XML(SVG) | | 办公文档生成 | XML(OOXML) | | 银行/医疗/政企对接 | XML(带 XSD) | | 大规模配置 | XML(Spring/Maven)或 YAML | | 人类手写配置 | YAML | | 流式日志 | JSONL(每行一个 JSON) |
在本地完成格式转换
无论你在解析 API 响应、把 XML 转 JSON、还是把 JSON 转 YAML 写配置,这些操作都涉及业务数据,最好别贴到陌生网站。
JSON 格式化工具 处理 API 响应和配置文件,XML/JSON 转换器 在两种格式之间互转,JSON/YAML 转换器 和 YAML/JSON 转换器 帮你处理配置文件。所有解析和转换都在浏览器本地完成,数据不离开你的设备。
选 JSON 还是 XML,看的是生态、工具链、约束要求,而不是哪个"更先进"。
relatedTools
相关文章
在线 XML/JSON 转换器:数据格式互转工具
学习如何在 XML 和 JSON 格式之间转换数据。了解 XML 和 JSON 的特点差异,以及在 API 集成、配置管理和数据交换中的应用场景。
在线 Markdown 预览器:实时渲染和编辑 Markdown 文档
学习如何使用在线 Markdown 预览器实时渲染 Markdown 文档。了解 Markdown 语法、GFM 扩展、表格和代码高亮,以及在技术文档中的最佳实践。
在线 JSON/YAML 转换器:配置文件格式互转工具
学习如何在 JSON 和 YAML 格式之间转换配置数据。了解 JSON 和 YAML 的特点差异,以及在 DevOps 和配置管理中的应用场景。