← 返回博客

JSON 转 XML 完全指南

2026-04-06 · 5 分钟阅读

为什么需要 JSON 转 XML?

尽管 JSON 已经主导现代 Web API,XML 在某些场景下依然不可替代:SOAP Web 服务(许多企业和银行系统仍在使用);某些政府数据接口和行业标准(如 HL7 医疗数据交换、FinXML 金融数据);XML 配置文件(如 Maven pom.xml、Spring 配置);需要 XSLT 转换的数据处理管道。

当你需要将现代 JSON API 的数据集成到遗留 XML 系统时,或者反过来,就需要在两种格式之间转换。了解正确的转换规则和工具,能避免数据丢失和结构错误。

基本转换规则

JSON 对象转 XML 的基本规则:JSON 对象的每个键变成 XML 元素的标签名;键对应的值变成元素的文本内容(如果是原始类型)或子元素(如果是对象);数组的每个元素通常重复父标签名或使用专门的包装元素。

// JSON
{
  "user": {
    "name": "Alice",
    "age": 30,
    "tags": ["admin", "user"]
  }
}

<!-- XML 结果 / XML Result -->


    Alice
    30
    admin
    user


数组转换的挑战

JSON 数组转 XML 是最棘手的部分,因为 XML 没有数组的直接对应概念。常见的处理方式有三种:重复元素法(如上例,每个数组元素重复同名标签);包装元素法(用一个父元素包裹所有数组元素:<tags><item>admin</item><item>user</item></tags>);属性法(将数组内容存储为 XML 属性值,适合简单字符串数组)。

三种方式各有适用场景,需要根据目标系统期望的 XML 格式来决定。在与第三方 XML 系统对接时,务必先确认对方期望的 XML 结构,再选择相应的转换策略。

编程语言中的 JSON 转 XML

# Python
import json, xml.etree.ElementTree as ET
from dicttoxml import dicttoxml

data = {"user": {"name": "Alice", "age": 30}}
xml_bytes = dicttoxml(data, custom_root='root')

// JavaScript (Node.js - xml2js library)
const xml2js = require('xml2js');
const builder = new xml2js.Builder();
const xml = builder.buildObject(jsonData);

// Java (Jackson)
XmlMapper xmlMapper = new XmlMapper();
String xml = xmlMapper.writeValueAsString(jsonObject);

XML 特有特性在转换中的处理

XML 有一些 JSON 没有的特性,在转换时需要特殊处理:XML 属性(Attributes):JSON 没有属性概念,将 JSON 键转换为 XML 属性还是子元素需要人工决定,通常约定以 @ 开头的键转换为属性(如 @idid="...");XML 命名空间(Namespace):复杂 XML 系统经常使用命名空间,纯粹从 JSON 转换无法自动推断命名空间,需要额外配置;CDATA 段:包含特殊字符的内容需要用 CDATA 包裹,转换工具通常能自动处理。

XML 转回 JSON:逆向转换

从 XML 转回 JSON 通常更复杂,因为 XML 的属性、命名空间、文本节点等概念在 JSON 中没有直接对应,需要决定如何处理这些元素。常见的转换策略:属性映射到以 @$ 为前缀的键;文本内容映射到 #text 或类似的特殊键;命名空间前缀保留或去除。

不同的转换库对这些细节的处理方式不同,建议在项目开始时明确选定一个转换库并统一使用,避免因为转换策略不一致导致数据解析错误。

在线转换工具的使用建议

使用在线 JSON 转 XML 工具时,注意:转换前先用 JSON 格式化工具确认 JSON 语法正确;检查工具对数组的处理方式是否符合需求;转换后的 XML 要用 XML 验证工具确认格式是否合法;对于包含敏感数据的 JSON,优先使用本地处理的工具或离线处理方法。

对于批量转换场景(如将大量 JSON 文件批量转为 XML),建议使用命令行工具或编写脚本,而不是依赖在线工具逐个处理,效率更高也更可靠。

立即免费使用相关工具

免费使用 →