JSON vs XML:为什么现代 API 都选择 JSON
JSON 和 XML 都是结构化数据格式,但在实际开发中的使用体验差异很大。XML 更明确、更冗长,在一些企业系统和历史接口里仍然常见。JSON 更紧凑、更容易阅读,也已经成为现代 REST API、Webhook、前端应用和日志系统的默认格式。
这里的问题不是 XML 是否已经过时。XML 在 SOAP API、文档格式、需要命名空间的系统、混合文本标记等场景中仍然有价值。更实际的问题是:为什么大多数新 Web API 会选择 JSON?开发者在发送或保存 JSON payload 前,又应该检查什么?
JSON 和 XML 对比
下面是同一份用户数据的 XML 表示:
<user>
<id>1</id>
<name>张三</name>
<email>[email protected]</email>
<active>true</active>
</user>
对应的 JSON 表示是:
{
"id": 1,
"name": "张三",
"email": "[email protected]",
"active": true
}
JSON 更短,因为每个字段名只出现一次。XML 中字段名通常既要出现在开始标签里,也要出现在结束标签里。对于很小的 payload,这点差异不明显;但对于大型 API 响应,它会影响可读性、传输体积和调试速度。
为什么 API 更偏向 JSON
JSON 天然对应对象、数组、字符串、数字、布尔值和 null。这些类型和 JavaScript、TypeScript、Go、Python、Java、PHP 等语言里的基础数据结构都很容易互相转换。
因此 JSON 很适合:
- REST API 请求体和响应体。
- Webhook payload。
- 前端页面状态初始化。
- 工具生成的配置片段。
- 结构化应用日志。
- 在浏览器调试工具、终端脚本和数据库之间复制的数据。
JSON 也很适合浏览器调试。开发者可以从 Network 面板复制响应,格式化 payload,截取一小段数据复现问题,而不需要理解额外的标记模型。
XML 仍然适合哪些场景
XML 有一些 JSON 并不打算替代的能力,比如属性、命名空间、Schema、注释、处理指令,以及文本和结构混合的内容。这些能力在文档型数据和成熟企业系统里仍然有意义。
XML 常见于:
- SOAP 集成。
- RSS 和 Atom feed。
- Office 文档内部格式。
- 部分支付、银行、政务接口。
- 文本和结构交织在一起的标记型数据。
如果数据更像一份文档,XML 可能是合理选择。如果数据更像对象、数组或接口消息,JSON 通常更简单。
JSON 的语法比 JavaScript 对象更严格
一个常见误区是:看起来像 JavaScript 对象的内容,就一定是合法 JSON。实际上标准 JSON 比 JavaScript 对象字面量严格得多。
下面这段是合法 JavaScript,但不是合法 JSON:
{
name: '张三',
active: true,
}
标准 JSON 要求字段名和字符串都使用双引号,而且不允许尾随逗号:
{
"name": "张三",
"active": true
}
这个区别在 API 接口、数据库 JSON 字段、浏览器 JSON.parse() 中尤其重要。JSON5 和带注释 JSON 可以用于本地配置,但在作为 API 数据发送前,通常应该先转换为标准 JSON。
API 调试中常见的 JSON 问题
当接口拒绝 JSON payload 时,原因经常很小:
}或]前面多了尾随逗号。- 字符串使用了单引号。
- 从配置文件复制时带上了注释。
- 对象字段之间少了逗号。
- API 需要数字或布尔值,但 payload 里传成了字符串。
- 嵌套 JSON 字符串没有单独解析。
- 从 URL 查询参数复制出来的 JSON 没有先解码。
例如下面这段看起来很清楚,但严格 JSON 解析会失败:
{
"limit": 20,
"includeArchived": false,
}
最后一个逗号是非法的。严格解析器可能提示 Unexpected token },看起来像是右大括号有问题,实际原因通常是前面的逗号。
如何选择 JSON、XML 和 JSON5
如果数据要在系统之间交换、写入 JSON 数据库字段、发送到 REST API,或交给标准库解析,优先使用 JSON。
如果外部系统明确要求 XML,或者需要命名空间、Schema、文档型结构,那么继续使用 XML。
如果文件主要由人维护,并且消费方明确支持 JSON5 或 JSONC,可以使用带注释 JSON。但它不应该被当成 API payload 的默认格式。
推荐检查流程
当你从日志、浏览器调试工具、Webhook 后台或同事那里拿到一段 payload 时,先按这个流程检查:
- 先格式化,让对象和数组层级清楚可见。
- 如果要发给 API,确认它是标准 JSON。
- 检查字符串、数字、布尔值、数组和对象的类型是否符合接口要求。
- 如果内容来自 URL 或 Base64,先解码再检查。
- 用最小可用样例测试接口,再发送完整 payload。
需要快速检查一段 JSON,可以直接使用下面的工具:
也可以打开完整的 JSON 格式化工具。如果 payload 来自 URL,可以先用 URL 编码工具 解码;如果它是通过 Base64 传输的,可以先用 Base64 工具 解码,再检查解码后的 JSON。