- 使用 Jackson 库 (推荐,高性能,功能全面)
- 使用 Gson 库 (Google 出品,使用简单)
使用 Jackson 库 (推荐)
Jackson 是 Java 生态中最流行、性能最好的 JSON 处理库之一,它也提供了处理 XML 的扩展模块。

步骤 1: 添加 Maven 依赖
您需要在您的 pom.xml 文件中添加 Jackson 的核心库和 XML 处理模块的依赖。
<dependencies>
<!-- Jackson 核心库 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- 请使用最新版本 -->
</dependency>
<!-- Jackson XML 处理模块 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.15.2</version> <!-- 版本号与核心库保持一致 -->
</dependency>
</dependencies>
步骤 2: 编写转换代码
Jackson 的 XML 模块会自动处理 JSON 和 Java 对象之间的映射,它会根据 JSON 的结构生成对应的 XML。
示例 JSON (data.json):
{
"name": "John Doe",
"age": 30,
"isStudent": false,
"address": {
"street": "123 Main St",
"city": "New York"
},
"phoneNumbers": [
"123-456-7890",
"987-654-3210"
]
}
Java 转换代码:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.io.File;
import java.io.IOException;
public class JacksonJsonToXmlConverter {
public static void main(String[] args) {
// 1. 创建一个 ObjectMapper,并指定使用 XML 格式
ObjectMapper xmlMapper = new XmlMapper();
try {
// 2. 读取 JSON 文件并将其映射为 Java 对象 (Map 或自定义 POJO)
// 这里使用 Map 来处理通用的 JSON 结构
File jsonFile = new File("data.json");
Object jsonObject = xmlMapper.readValue(jsonFile, Object.class);
// 3. 将 Java 对象序列化为 XML 格式的字符串
String xmlString = xmlMapper.writeValueAsString(jsonObject);
// 4. 输出 XML 字符串
System.out.println("转换后的 XML:");
System.out.println(xmlString);
// (可选) 将 XML 写入文件
// File xmlFile = new File("output.xml");
// xmlMapper.writeValue(xmlFile, jsonObject);
} catch (IOException e) {
e.printStackTrace();
}
}
}
转换后的 XML 输出:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<name>John Doe</name>
<age>30</age>
<isStudent>false</isStudent>
<address>
<street>123 Main St</street>
<city>New York</city>
</address>
<phoneNumbers>
<phoneNumbers>123-456-7890</phoneNumbers>
<phoneNumbers>987-654-3210</phoneNumbers>
</phoneNumbers>
</root>
重要提示:
- 默认情况下,根元素会是
<root>,您可以通过注解@JacksonXmlRootElement(localName = "yourRootElement")来自定义根元素名称。 - 数组/列表会被转换为同名标签包裹的多个子元素。
使用 Gson 库
Gson 是 Google 提供的另一个非常流行的 JSON 处理库,它本身不直接支持 XML,但我们可以通过一个额外的库 json-xml-converter 来实现转换。
步骤 1: 添加 Maven 依赖
您需要添加 Gson 和 json-xml-converter 的依赖。

<dependencies>
<!-- Google Gson 库 -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 请使用最新版本 -->
</dependency>
<!-- Gson to XML 转换器 -->
<dependency>
<groupId>io.github.wycst</groupId>
<artifactId>wjson</artifactId>
<version>0.9.8</version> <!-- 请使用最新版本 -->
</dependency>
</dependencies>
(注意: wjson 是一个功能强大的库,它扩展了 Gson 并提供了 XML 转换能力。)
步骤 2: 编写转换代码
Java 转换代码:
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import wjson.Xml;
public class GsonJsonToXmlConverter {
public static void main(String[] args) {
// 1. 读取 JSON 字符串 (或从文件读取)
String jsonString = "{\n" +
" \"name\": \"John Doe\",\n" +
" \"age\": 30,\n" +
" \"isStudent\": false,\n" +
" \"address\": {\n" +
" \"street\": \"123 Main St\",\n" +
" \"city\": \"New York\"\n" +
" },\n" +
" \"phoneNumbers\": [\n" +
" \"123-456-7890\",\n" +
" \"987-654-3210\"\n" +
" ]\n" +
"}";
try {
// 2. 使用 Gson 解析 JSON 字符串为 JsonElement
Gson gson = new Gson();
JsonElement jsonElement = JsonParser.parseString(jsonString);
// 3. 使用 wjson 的 Xml 工具类将 JsonElement 转换为 XML 字符串
// 第二个参数是根节点的名称
String xmlString = Xml.toString(jsonElement, "root");
// 4. 输出 XML 字符串
System.out.println("转换后的 XML:");
System.out.println(xmlString);
} catch (Exception e) {
e.printStackTrace();
}
}
}
转换后的 XML 输出:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<name>John Doe</name>
<age>30</age>
<isStudent>false</isStudent>
<address>
<street>123 Main St</street>
<city>New York</city>
</address>
<phoneNumbers>
<item>123-456-7890</item>
<item>987-654-3210</item>
</phoneNumbers>
</root>
注意: 使用 wjson 时,数组的默认标签是 <item>,这与 Jackson 的 <phoneNumbers> 不同,您可以通过更复杂的配置来改变这个行为。
总结与对比
| 特性 | Jackson | Gson + wjson |
|---|---|---|
| 易用性 | 非常直观,XmlMapper 一站式服务 |
需要两个库配合,但核心逻辑简单 (JsonParser + Xml.toString) |
| 性能 | 非常高,业界标杆 | 性能也很好,但通常略逊于 Jackson |
| 灵活性 | 极高,提供丰富的注解来精确控制 XML 的生成(如命名空间、属性、CDATA 等) | 灵活性也不错,但注解生态系统不如 Jackson 成熟 |
| 生态系统 | 非常成熟,是 Spring Boot 等框架的默认选择,社区支持强大 | 成熟,由 Google 支持,但在 XML 转换方面不如 Jackson 专注 |
| 推荐场景 | 生产环境、高性能要求、复杂 XML 结构转换 | 快速原型、已在使用 Gson 的项目、对性能要求不是极端苛刻的场景 |
对于绝大多数 Java 项目,强烈推荐使用 Jackson,它不仅性能卓越,而且功能强大,能应对各种复杂的转换需求,是业界的事实标准。
如果您只是想快速完成一个简单的转换任务,并且项目中已经在使用 Gson,Gson + wjson 也是一个不错的选择。
