乐途乐途
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
  • 学习路径
  • XML 基础语法

    • XML 概述
    • XML 文档结构
    • XML 元素
    • XML 属性
    • XML 语法规则
    • XML 命名空间
    • XML 注释与处理指令
  • DTD 与文档验证

    • DTD 概述
    • DTD 元素声明
    • DTD 属性声明
    • DTD 实体声明
    • DTD 元素与属性对比
    • DTD 完整示例
  • XML Schema 定义

    • XML Schema 概述
    • XSD 简单类型
    • XSD 复杂类型
    • XSD 命名空间与引用
  • XPath 节点定位

    • XPath 概述
    • XPath 路径表达式
    • XPath 谓词与函数
  • XSLT 转换

    • XSLT 概述
    • XSLT 模板与匹配
    • XSLT 控制结构
    • XSLT 输出控制
  • XML 解析技术

    • XML 解析概述
    • DOM 解析
    • SAX 解析
    • StAX 解析
    • XML 与 Java — JAXP
  • XML 在 Java 中的应用

    • Spring XML 配置
    • MyBatis XML 映射
    • pom.xml 与 Maven
    • web.xml 配置详解
  • 现代数据格式对比

    • XML 与 JSON 对比
    • XML 与 YAML 对比
  • XML 显示与浏览器集成

    • XML 在浏览器中的显示
    • XMLHttpRequest 与 AJAX
    • 服务器端 XML 处理
  • XML 进阶查询与链接

    • XQuery 查询语言
    • XLink 超链接
    • XML 验证工具使用
  • XML Web 服务(选读)

    • XML Web 服务概述
    • SOAP 协议详解
    • WSDL 服务描述
    • RSS 内容聚合
    • RDF 资源描述框架

XML 与 JSON 对比

本章定位 :全面对比 JSON 和 XML——语法、数据类型、可读性、解析性能、Schema 支持、适用场景决策树。理解"选择哪个"背后的工程权衡。

定义与作用

JSON (JavaScript Object Notation)和 XML 都是结构化数据表示格式。JSON 源自 JavaScript 对象字面量语法,2000 年代初随 AJAX 兴起成为 Web 数据交换的事实标准。XML 是更早的标准(1998),最初设计为 SGML 的简化版。

两者都解决了"不同系统间如何交换结构化数据"的问题,但设计哲学完全不同:XML 追求完整性和可验证性,JSON 追求简洁和易用。

核心原理:表达式能力对比

XML 文档模型:丰富的文档标记体系——属性/元素区分、命名空间、Schema 验证、XPath/XSLT 查询转换。"重"带来了验证和转换能力。

JSON 数据模型:精简的数据序列化格式——只有对象/数组,6 种类型。"轻"带来了易用性和性能。

语法/结构要点

相同数据:XML vs JSON

XML:

<bookstore>
  <book category="web">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price currency="USD">39.95</price>
  </book>
</bookstore>

JSON:

{
  "bookstore": {
    "book": {
      "category": "web",
      "title": {"lang": "en", "#text": "Learning XML"},
      "author": "Erik T. Ray",
      "year": 2003,
      "price": {"currency": "USD", "#text": 39.95}
    }
  }
}

XML 的属性 category="web" 和 lang="en" 在 JSON 中没有天然对应,需要用嵌套对象 + 特殊键(如 #text)模拟。

全面对比表

维度XMLJSON
诞生1998 (W3C)2001 (Douglas Crockford)
设计目标文档标记 + 数据交换轻量数据交换
根SGMLJavaScript 对象字面量
数据结构元素树 + 属性对象 + 数组
数据类型无(全是字符串)string/number/boolean/null/array/object
SchemaDTD/XSD(成熟)JSON Schema(IETF RFC)
查询XPath/XQueryJSONPath / jq
转换XSLT无原生支持(靠代码)
命名空间支持不支持
注释支持不支持
冗余度高(结束标签)低
解析速度慢快
可读性好(结构清晰)好(简洁)
Web 原生否(需解析)JavaScript 原生对象

完整示例:白歌做数据格式选型

场景说明

飞翔科技的架构师 白歌 面临两个子系统的数据格式选型:

  • 场景 A :REST API 响应,前端是 React SPA
  • 场景 B :政府机构数据交换,需要 XSD 验证,包含混合内容(段落中嵌入引用)

选型分析

场景 A → JSON :

{
  "students": [
    {"id": "S001", "name": "小崔", "gpa": 3.8},
    {"id": "S002", "name": "黄俪", "gpa": 3.5}
  ]
}
  • JavaScript 原生解析:const data = await response.json()
  • 体积约为 XML 的 60%(无结束标签)
  • 前端不需要担心 Schema 验证

场景 B → XML :

<report>
  <section>
    <p>根据<ref id="law-2024"/>第3条,教育机构应当...</p>
  </section>
</report>
  • 混合内容(文本中嵌入子元素)JSON 无法优雅表达
  • 政府系统通常已有一套 XSD 验证体系
  • 需要 ref 到 law 的 IDREF 关联(DTD 原生支持)

选型决策树

需要混合内容(文本+子元素)? → 是 → XML
需要 Schema 严格验证?       → 是 → XML
需要 XSLT 转换为多格式?      → 是 → XML
前端是 JavaScript?           → 是 → JSON
REST API / 微服务通信?       → 是 → JSON
需要最小带宽?                → 是 → JSON

易错场景

错误一:JSON 中丢失 XML 属性信息

XML 的属性(如 currency="USD")在 JSON 中没有直接对应。简单映射会导致信息丢失,需要约定映射规则(如 "@currency": "USD" 或嵌套对象)。

错误二:JSON 没有日期类型

{"date": "2024-06-10"}  // 这是字符串,不是日期!

XML 有 xs:date 类型(通过 XSD 约束),JSON 没有。双方需要约定日期格式(ISO 8601)。

面试考点

考点参考答案要点
JSON 相比 XML 的优势?更简洁(无结束标签)、JavaScript 原生支持、解析更快、数据类型更丰富(数字/布尔/null 原生区分)
XML 相比 JSON 的优势?Schema 验证体系成熟(DTD/XSD)、查询转换能力(XPath/XSLT/XQuery)、命名空间、混合内容、注释支持
REST API 为什么普遍选择 JSON?JavaScript 原生解析零成本、体积小(约60%)、前端生态(fetch/axios 默认 JSON)、不需要 Schema/命名空间等 XML 重型特性
下一页
XML 与 YAML 对比