XML 与 JSON 互转指南:配置文件与 API 数据格式转换
JSON(更新于 2026年6月19日)
XML 与 JSON 的核心差异
| 特性 | XML | JSON |
|---|---|---|
| 数据格式 | 标签标记 | 键值对 |
| 属性 | 有(<node attr="val">) |
无(属性转为字段) |
| 命名空间 | 有(xmlns) |
无 |
| 注释 | 有(<!-- -->) |
无 |
| 数组表示 | 隐式(同名元素重复) | 显式([]) |
| 文本节点 | 混合内容(标签+文本) | 纯字符串值 |
XML 更适合文档型数据(SVG、HTML、配置),JSON 更适合结构化数据(API 响应)。
XML 属性如何映射到 JSON
XML 元素可以同时有属性和文本内容,这是转换的难点:
简单元素
<person name="张三" age="30"/>
{
"person": {
"@name": "张三",
"@age": "30"
}
}
约定用
@前缀表示 XML 属性,这是最常见的转换规则。
混合内容(属性 + 文本)
<price currency="CNY">68.00</price>
{
"price": {
"@currency": "CNY",
"#text": "68.00"
}
}
用
#text表示元素的文本内容,与属性区分。
数组检测:最容易踩的坑
XML 中数组是隐式的——同名元素重复出现就是数组:
<books>
<book>三体</book>
<book>活着</book>
</books>
{
"books": {
"book": ["三体", "活着"]
}
}
问题:只有一个元素时,XML 看不出是数组:
<books>
<book>三体</book>
</books>
可能转为:
{
"books": {
"book": "三体"
}
}
解决:使用 XML↔JSON 工具 时,勾选「强制数组」选项,指定哪些元素始终作为数组处理。
命名空间处理
XML 命名空间在 JSON 中没有直接对应:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<m:GetPrice xmlns:m="http://example.com">
<m:Item>123</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
常见处理策略:
| 策略 | 说明 | 适用场景 |
|---|---|---|
| 保留前缀 | soap:Body → "soap:Body" |
SOAP/WSDL 处理 |
| 去除前缀 | soap:Body → "Body" |
简单场景,无冲突 |
| 使用命名空间键 | {soap}Body |
需要区分同名的不同命名空间 |
使用 XML 格式化工具 先整理 XML,再进行转换。
使用 XML↔JSON 工具
第一步:打开工具
访问 XML↔JSON 工具,选择转换方向。
第二步:输入源数据
- XML → JSON:粘贴 XML 字符串
- JSON → XML:粘贴 JSON 字符串
第三步:配置转换选项
| 选项 | 说明 |
|---|---|
| 属性前缀 | 属性映射为 @attr 还是 $attr |
| 文本节点键 | 文本内容映射为 #text 还是 _text |
| 强制数组 | 指定始终作为数组的元素名 |
| 命名空间 | 保留/去除/转换 |
第四步:执行转换
点击「转换」,查看结果并复制。
实战场景
配置文件迁移
许多旧项目使用 XML 配置(Spring、Maven),新项目倾向 YAML/JSON:
pom.xml → package.json(依赖信息)
spring-config.xml → application.json(Bean 配置)
SOAP API 转 REST
SOAP 响应是 XML,需要转为 JSON 供前端使用:
SOAP XML 响应 → JSON → 前端渲染
SVG 元数据提取
SVG 是 XML 格式,提取元数据转为 JSON 便于程序处理:
<svg width="100" height="100"> → {"svg": {"@width": "100", "@height": "100"}}
JSON 转 XML 注意事项
JSON 转 XML 时需要注意:
| 注意点 | 说明 |
|---|---|
| 根元素 | JSON 必须有唯一的根键 |
| 键名合法性 | XML 标签名不能以数字开头,不能含空格 |
| 数组包装 | JSON 数组需要指定包装元素名 |
| 特殊字符 | <、>、& 需要转义为实体 |
常见问题
| 问题 | 原因 | 解决 |
|---|---|---|
| 单元素未转为数组 | XML 无法区分单元素和数组 | 勾选「强制数组」 |
| 属性丢失 | 转换规则未配置属性前缀 | 检查属性前缀设置 |
| 命名空间冲突 | 不同命名空间有同名元素 | 保留命名空间前缀 |
| JSON 转报错 | 键名不合法 | 修改键名符合 XML 规范 |
| 混合内容丢失 | 文本节点键未正确映射 | 检查 #text 配置 |
总结
XML 与 JSON 互转是数据格式迁移和 API 集成中的常见需求。理解属性映射、数组检测、命名空间三大核心问题,是正确完成转换的关键。XML↔JSON 工具 提供灵活的转换配置,配合 JSON 格式化 和 XML 格式化 构建完整的格式转换工作流。
#XML#JSON#格式转换#API#配置