JSON 和 XML 学习笔记(2025–2026 实用对比版)
这是目前最常用于前后端数据交换的两种格式的系统对比笔记,重点放在实际开发中最容易出错、面试最常问、生产中最常用的部分。
1. 核心对比表(背下来就能应对 80% 面试题)
| 维度 | JSON | XML | 胜出方(2025–2026 主流趋势) |
|---|---|---|---|
| 全称 | JavaScript Object Notation | eXtensible Markup Language | — |
| 数据类型支持 | 对象、数组、字符串、数字、布尔、null | 元素、属性、文本、CDATA、注释、命名空间等 | JSON 更简洁 |
| 可读性 | 非常高(接近 JS 对象字面量) | 一般(标签冗长) | JSON |
| 文件体积 | 更小(无闭合标签、无属性冗余) | 更大(通常大 2–5 倍) | JSON |
| 解析速度 | 极快(原生支持,V8 等引擎高度优化) | 较慢(需要 DOM/SAX/StAX 等解析器) | JSON |
| 生成/序列化难度 | 极简单(几乎所有语言都有标准库) | 稍复杂(需要考虑命名空间、CDATA 等) | JSON |
| 注释支持 | 不支持(官方标准无注释) | 支持() | XML |
| 命名空间 | 无 | 支持(非常强大) | XML(企业级复杂场景) |
| 属性 vs 元素 | 只有键值对 | 支持元素和属性两种写法 | XML 更灵活 |
| Schema 校验 | JSON Schema(逐渐普及,但不强制) | XSD(DTD 已过时) | 两者都有,但 XML 更成熟 |
| 当前主流使用场景 | REST API、Web 前后端、配置、NoSQL | SOAP Web Service、企业集成、Android Layout、Office Open XML | JSON 占绝对主导 |
| 2025–2026 趋势 | 统治地位(OpenAPI、GraphQL、gRPC JSON) | 边缘化,仅遗留系统 + 特定领域 | JSON |
2. 语法快速对照(最容易写错的地方)
// JSON(标准写法)
{
"name": "张三",
"age": 28,
"isStudent": false,
"scores": [95, 88, 76],
"address": {
"city": "上海",
"zip": "200000"
},
"tags": null,
"note": "备注里不能写注释" // ← 不能写 // 或 /* */
}
<!-- XML(常见两种风格) -->
<person id="1001"> <!-- 属性写法 -->
<name>张三</name>
<age>28</age>
<isStudent>false</isStudent>
<scores>
<item>95</item>
<item>88</item>
<item>76</item>
</scores>
<address city="上海" zip="200000"/> <!-- 自闭合 + 属性 -->
<tags nil="true"/> <!-- 常见表示 null 的方式 -->
<!-- 这是一行注释 -->
</person>
最常踩的坑对比:
| 场景 | JSON 正确写法 | XML 正确写法 | 常见错误(JSON) | 常见错误(XML) |
|---|---|---|---|---|
| 布尔值 | true / false | true / false(不区分大小写) | True / False | 1 或 Y |
| 数字 | 直接写,不加引号 | 文本节点内容 | “age”: “28” | — |
| null | null | 或省略元素 | “null”(字符串) | null(字符串) |
| 空数组/空对象 | [] / {} | 或 | null(不推荐) | — |
| 特殊字符转义 | \” \ \/ \b \f \n \r \t \uXXXX | < > & ” ‘ | 忘记转义 “ | 忘记转义 & 或 < |
| 键名必须双引号 | 必须 | 元素名/属性名可以不加引号(但不推荐) | {name: “张三”} | — |
3. 实际开发中最常用的场景对比(2026 年视角)
| 场景 | 推荐格式 | 主要原因 / 当前生态 | 备选方案 |
|---|---|---|---|
| RESTful API | JSON | OpenAPI/Swagger、axios/fetch 原生支持 | 极少数遗留 SOAP 用 XML |
| GraphQL | JSON | 官方只支持 JSON | — |
| gRPC(默认) | protobuf | 性能最高 | gRPC-Web / gRPC-JSON |
| 前端配置文件 | JSON | vite.config.js、package.json、tsconfig.json | YAML / TOML 也在抢市场 |
| Android 布局文件 | XML | 历史原因 + Android Studio 强绑定 | Jetpack Compose 用 Kotlin DSL |
| 企业级 SOAP Web Service | XML | WS-* 标准、命名空间、XSD 校验 | 逐渐被 REST/JSON 取代 |
| Office 文件(docx/xlsx) | XML | Open XML 格式内部是 ZIP + XML | — |
| 日志结构化输出 | JSON | ELK、Loki、Grafana 等直接解析 | — |
| 大模型工具调用返回 | JSON | OpenAI、Anthropic、DeepSeek 等强制要求 JSON Mode | — |
4. 面试 / 笔试最高频 12 问(建议准备的答案框架)
- JSON 和 XML 最大的区别是什么?
- 为什么现在几乎都用 JSON 而不用 XML 了?
- JSON 有哪些数据类型?XML 呢?
- JSONP 为什么能绕过同源策略?(历史遗留问题)
- JSON 中怎么表示日期?(没有标准,通常 ISO 8601)
- XML 有哪些解析方式?优缺点?(DOM / SAX / StAX / Pull)
- JSON Schema 和 XSD 分别用来干嘛?
- 怎么把 JSON 转成 XML?有什么坑?
<![CDATA[]]>是干什么用的?JSON 有类似机制吗?- 为什么说 JSON 不是 JavaScript 的子集?(历史上有细微差异)
- 在前后端交互中,Content-Type 分别写什么?
- 如果让你设计一个支持注释的 JSON,你会怎么扩展?
5. 快速记忆口诀(面试背诵用)
- 轻量、快速、无注释、无命名空间、无 Schema 强制 → JSON
- 结构化强、支持注释、命名空间、严格校验、历史悠久 → XML
- 2026 年口诀:能用 JSON 就别用 XML,除非你在维护 2010 年前的银行/电信/政府遗留系统。
需要哪一部分展开更详细的代码示例、工具推荐、常见转换库(Jackson、Gson、fastjson2、dom4j、JAXB 等)、或者某个面试题的完整参考答案?直接告诉我~