Java实现json转xml的几种方法详解

原创 2025-06-12 09:49:26编程技术
898

在Java开发中,JSON和XML是两种常见的数据交换格式。将JSON转换为XML的需求常出现在接口适配、数据迁移等场景中。本文ZHANID工具网将详细介绍几种主流的JSON转XML实现方法,涵盖第三方库的使用及手动转换逻辑,帮助开发者根据项目需求选择最合适的方案。

一、使用Jackson库实现JSON转XML

Jackson是Java生态中功能强大的数据绑定库,其jackson-dataformat-xml模块支持JSON与XML的互转。

实现步骤

  1. 添加依赖(Maven):

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.15.0</version>
    </dependency>
  2. 编写转换代码

    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.dataformat.xml.XmlMapper;
    
    public class JacksonConverter {
        public static String jsonToXml(String json) throws Exception {
            ObjectMapper jsonMapper = new ObjectMapper();
            JsonNode rootNode = jsonMapper.readTree(json);
            
            XmlMapper xmlMapper = new XmlMapper();
            // 去除XML声明头(可选)
            xmlMapper.enable(XmlMapper.Feature.OMIT_XML_DECLARATION);
            return xmlMapper.writeValueAsString(rootNode);
        }
    }
  3. 调用示例

    String json = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
    String xml = JacksonConverter.jsonToXml(json);
    System.out.println(xml);

输出结果

<ObjectNode>
  <name>John</name>
  <age>30</age>
  <city>New York</city>
</ObjectNode>

优点

  • 高度灵活,支持复杂JSON结构

  • 可通过注解定制XML标签

  • 性能优异,适合大数据量转换

缺点

  • 依赖项较多

  • 默认生成的XML标签可能不符合业务需求

二、使用org.json库实现转换

org.json是轻量级JSON处理库,其XML类提供直接转换功能。

实现步骤

  1. 添加依赖

    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20230618</version>
    </dependency>
  2. 编写转换代码

    import org.json.JSONObject;
    import org.json.XML;
    
    public class OrgJsonConverter {
        public static String jsonToXml(String json) {
            JSONObject jsonObject = new JSONObject(json);
            return XML.toString(jsonObject, "root");
        }
    }
  3. 调用示例

    String json = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
    String xml = OrgJsonConverter.jsonToXml(json);
    System.out.println(xml);

输出结果

<root>
  <name>John</name>
  <age>30</age>
  <city>New York</city>
</root>

优点

  • 代码简洁,零学习成本

  • 支持指定根节点名称

  • 依赖单一,适合轻量级项目

缺点

  • 对复杂JSON结构支持有限

  • 无法自定义XML属性

  • 数组处理需要额外逻辑

本站在线工具推荐:XML/JSON转换工具

三、使用json-lib库实现转换

json-lib是较老的JSON处理库,支持双向转换但已停止维护。

实现步骤

  1. 添加依赖

    <dependency>
        <groupId>net.sf.json-lib</groupId>
        <artifactId>json-lib</artifactId>
        <version>2.4</version>
        <classifier>jdk15</classifier>
    </dependency>
  2. 编写转换代码

    import net.sf.json.JSON;
    import net.sf.json.JSONSerializer;
    import net.sf.json.xml.XMLSerializer;
    
    public class JsonLibConverter {
        public static String jsonToXml(String json) {
            JSON jsonObj = JSONSerializer.toJSON(json);
            XMLSerializer xmlSerializer = new XMLSerializer();
            return xmlSerializer.write(jsonObj);
        }
    }

输出结果

<object>
  <name>John</name>
  <age>30</age>
  <city>New York</city>
</object>

优点

  • 简单直接的单行转换

  • 支持基本类型自动转换

缺点

  • 依赖已过时,存在安全风险

  • 无法控制XML结构

  • 对嵌套对象支持不足

java.webp

四、手动实现转换逻辑

对于简单JSON结构,可手动解析并构建XML。

实现步骤

import org.json.JSONArray;
import org.json.JSONObject;

public class ManualConverter {
    public static String jsonToXml(String json) {
        JSONObject jsonObj = new JSONObject(json);
        return buildXml(jsonObj, "root");
    }

    private static String buildXml(JSONObject obj, String tag) {
        StringBuilder xml = new StringBuilder();
        xml.append("<").append(tag).append(">");

        for (String key : obj.keySet()) {
            Object value = obj.get(key);
            if (value instanceof JSONObject) {
                xml.append(buildXml((JSONObject) value, key));
            } else if (value instanceof JSONArray) {
                JSONArray arr = (JSONArray) value;
                for (int i = 0; i < arr.length(); i++) {
                    xml.append(buildXml(arr.getJSONObject(i), key));
                }
            } else {
                xml.append("<").append(key).append(">")
                  .append(escapeXml(value.toString()))
                  .append("</").append(key).append(">");
            }
        }

        xml.append("</").append(tag).append(">");
        return xml.toString();
    }

    private static String escapeXml(String value) {
        return value.replace("&", "&amp;")
                   .replace("<", "&lt;")
                   .replace(">", "&gt;")
                   .replace("\"", "&quot;")
                   .replace("'", "&apos;");
    }
}

优点

  • 完全控制转换逻辑

  • 无第三方依赖

  • 适合简单固定结构

缺点

  • 维护成本高

  • 无法处理复杂嵌套

  • 需自行处理特殊字符

五、方法对比与选型建议

方法 性能 灵活性 学习成本 适用场景
Jackson 企业级复杂项目
org.json 快速原型开发
json-lib 遗留系统维护(不推荐)
手动实现 自定义 固定简单结构

最佳实践建议

  1. 优先选择Jackson方案处理生产环境复杂需求

  2. 快速验证时使用org.json简化开发

  3. 完全避免使用已停止维护的json-lib

  4. 仅在结构固定且无需维护时考虑手动实现

六、进阶技巧

Jackson高级配置

// 自定义XML命名空间
@JacksonXmlRootElement(namespace = "urn:example")
public class CustomWrapper {
    @JacksonXmlProperty(localName = "user-name")
    private String name;
    
    @JacksonXmlElementWrapper(useWrapping = false)
    @JacksonXmlProperty(localName = "item")
    private List<Item> items;
}

// 转换时包装对象
XmlMapper mapper = new XmlMapper();
mapper.registerModule(new JaxbAnnotationModule());
String xml = mapper.writeValueAsString(new CustomWrapper(jsonData));

org.json数组处理

// 处理JSON数组
JSONArray arr = new JSONArray("[{\"id\":1}, {\"id\":2}]");
String xml = XML.toString(arr, "items");
// 输出:<items><item><id>1</id></item><item><id>2</id></item></items>

七、总结

JSON转XML的实现方式多样,选择时应综合考虑:

  • 项目规模与性能要求

  • 数据结构的复杂度

  • 团队技术栈熟悉度

  • 长期维护成本

对于现代Java项目,推荐优先采用Jackson方案,通过其丰富的注解和配置能力,可以灵活应对各种复杂转换场景。在简单场景下,org.json库则提供了更轻量的解决方案。无论选择哪种方式,都应注意处理特殊字符和XML声明头等细节,确保生成的XML符合目标系统的解析规范。

Java json转xml
THE END
战地网
频繁记录吧,生活的本意是开心

相关推荐

JavaDB怎么进不去了?3个常见原因和解决办法
问题出在哪?先查连接状态 JavaDB进不去,最常见的就是服务没跑起来。你看,JavaDB默认用1527端口监听。如果连不上,大概率是它没启动或者端口被占了。用这段代码快速检测:...
2026-04-02 新闻资讯
260

Java版连锁挖矿mod叫什么名字
主流连锁挖矿mod名字汇总 根据抖音和百度贴吧的玩家反馈,Java版《我的世界》连锁挖矿mod有好几个常用名字。最常被推荐的是FTB Ultimine。它在抖音多个视频里被提到,能一...
2026-04-02 新闻资讯
416

Java日志管理框架:Log4j、SLF4J、Logback对比与使用方法详解
java主流日志框架中,Log4j 1.x作为早期标准,Log4j 2.x通过重构实现性能飞跃,Logback作为Log4j的继承者以原生SLF4J支持成为主流选择,而SLF4J作为日志门面,通过抽象层实现...
2025-09-15 编程技术
1032

Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
本文聚焦Java与MySQL协同环境下的全文检索优化实践,从索引策略、查询调优、参数配置到Java层优化,深入解析如何释放全文检索的潜力,为高并发、大数据量场景提供稳定高效的搜...
2025-09-13 编程技术
1001

JavaScript 中 instanceof 的作用及使用方法详解
在 JavaScript 的类型检查体系中,instanceof 是一个重要的操作符,用于判断一个对象是否属于某个构造函数的实例或其原型链上的类型。本文ZHANID工具网将系统讲解 instanceof...
2025-09-11 编程技术
1089

Java与MySQL数据库连接实战:JDBC使用教程
JDBC(Java Database Connectivity)作为Java标准API,为开发者提供了统一的数据访问接口,使得Java程序能够无缝连接各类关系型数据库。本文ZHANID工具网将以MySQL数据库为例...
2025-09-11 编程技术
892