什么是 XML 和 JSON
XML(eXtensible Markup Language,可扩展标记语言)是一种用于标记数据的标记语言,支持属性和命名空间。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,使用键值对表示数据。
对比示例
XML:
<user id="1">
<name>张三</name>
<email>zhang@example.com</email>
<tags>
<tag>developer</tag>
<tag>admin</tag>
</tags>
</user>
JSON:
{
"user": {
"@id": "1",
"name": "张三",
"email": "zhang@example.com",
"tags": {
"tag": ["developer", "admin"]
}
}
}
XML vs JSON 对比
| 特性 | XML | JSON | |------|-----|------| | 可读性 | 中等 | 高 | | 文件大小 | 大(标签冗余) | 小 | | 数据类型 | ❌ 全为字符串 | ✅ 多种类型 | | 属性支持 | ✅ 原生支持 | ⚠️ 需约定 | | 命名空间 | ✅ 支持 | ❌ 不支持 | | 注释 | ✅ 支持 | ❌ 不支持 | | Schema 验证 | ✅ XSD | ✅ JSON Schema | | Web 标准 | 传统标准 | 现代标准 |
为什么需要 XML/JSON 转换
- Web 服务迁移:SOAP(XML)→ REST(JSON)API 升级
- 配置文件转换:旧系统 XML 配置 → 新系统 JSON 配置
- 数据集成:不同系统使用不同数据格式
- RSS/Atom 解析:RSS Feed(XML)→ JSON 处理
- Office 文档:.docx/.xlsx 本质是 XML,需要转换为 JSON
- 遗留系统对接:新系统对接使用 XML 的旧系统
常见转换挑战
| 挑战 | 说明 | 解决方案 |
|------|------|---------|
| 属性 vs 子元素 | XML 属性在 JSON 中没有标准表示 | 使用 @attr 前缀 |
| 重复元素 | XML 可重复元素名 | JSON 转为数组 |
| 文本内容 | XML 混合内容 | 使用 #text 键 |
| 命名空间 | XML 命名空间前缀 | JSON 中使用完整 URI |
| 空元素 | <tag/> | JSON 中使用 null 或空字符串 |
如何使用在线工具
使用 DevToolkit Pro 的 XML/JSON 转换器:
- 粘贴 XML 或 JSON 数据
- 工具自动检测格式并转换
- 支持属性、命名空间等复杂结构
- 实时预览转换结果
- 处理大文件时支持流式转换
代码中的转换
JavaScript
const xml2js = require('xml2js');
const { XMLBuilder, XMLParser } = require('fast-xml-parser');
// XML → JSON
const parser = new XMLBuilder({ ignoreAttributes: false, attributeNamePrefix: '@_' });
const xml = '<user id="1"><name>张三</name></user>';
const builder = new XMLBuilder();
const json = parser.parse(xml);
// JSON → XML
const xmlBuilder = new xml2js.Builder();
const xmlStr = xmlBuilder.buildObject({ user: { name: '张三' } });
Python
import xmltodict
import json
# XML → JSON
xml_str = '<user id="1"><name>张三</name></user>'
data = xmltodict.parse(xml_str)
json_str = json.dumps(data, ensure_ascii=False, indent=2)
# JSON → XML
data = {"user": {"name": "张三"}}
xml_str = xmltodict.unparse(data, pretty=True)
FAQ
XML 属性怎么转换为 JSON?
没有标准转换方式。常见约定:使用 @ 前缀表示属性(如 @id),使用 #text 表示文本内容。不同工具的约定可能不同。
JSON 转 XML 会丢失信息吗?
可能。JSON 的某些特性 XML 不支持:数组(需要约定元素名)、无类型(XML 全为字符串)。转换前需要了解目标格式的限制。
什么时候用 XML,什么时候用 JSON?
使用 XML:需要命名空间、Schema 严格验证、文档混合内容(如 XHTML)。使用 JSON:Web API、配置文件、前后端数据交换。现代项目优先选择 JSON。
本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页。
相关文章
YAML JSON 转换完全指南:原理、工具与最佳实践
深入理解 YAML 和 JSON 的区别与联系,掌握 YAML JSON 双向转换的各种方法——在线工具、命令行、代码实现,以及常见陷阱和最佳实践。
在线 Markdown 预览器:实时渲染和编辑 Markdown 文档
学习如何使用在线 Markdown 预览器实时渲染 Markdown 文档。了解 Markdown 语法、GFM 扩展、表格和代码高亮,以及在技术文档中的最佳实践。
在线 JSONPath 查询工具:从 JSON 数据中提取所需信息
学习如何使用 JSONPath 表达式从 JSON 数据中精确提取信息。了解 JSONPath 的语法、常用表达式,以及在 API 开发和数据处理中的应用场景。