杰瑞科技汇

Java如何将JSON转换为XML格式?

  1. 使用 Jackson 库 (推荐,高性能,功能全面)
  2. 使用 Gson 库 (Google 出品,使用简单)

使用 Jackson 库 (推荐)

Jackson 是 Java 生态中最流行、性能最好的 JSON 处理库之一,它也提供了处理 XML 的扩展模块。

Java如何将JSON转换为XML格式?-图1
(图片来源网络,侵删)

步骤 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 转换代码:

Java如何将JSON转换为XML格式?-图2
(图片来源网络,侵删)
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 的依赖。

Java如何将JSON转换为XML格式?-图3
(图片来源网络,侵删)
<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 也是一个不错的选择。

分享:
扫描分享到社交APP
上一篇
下一篇