Skip to content
data2026-06-294 分钟阅读

选 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,看的是生态、工具链、约束要求,而不是哪个"更先进"。


广告