在Java开发中,JSON和XML是两种常见的数据交换格式。将JSON转换为XML的需求常出现在接口适配、数据迁移等场景中。本文ZHANID工具网将详细介绍几种主流的JSON转XML实现方法,涵盖第三方库的使用及手动转换逻辑,帮助开发者根据项目需求选择最合适的方案。
一、使用Jackson库实现JSON转XML
Jackson是Java生态中功能强大的数据绑定库,其jackson-dataformat-xml模块支持JSON与XML的互转。
实现步骤:
添加依赖(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>
编写转换代码:
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); } }调用示例:
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类提供直接转换功能。
实现步骤:
添加依赖:
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20230618</version> </dependency>
编写转换代码:
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"); } }调用示例:
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处理库,支持双向转换但已停止维护。
实现步骤:
添加依赖:
<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency>
编写转换代码:
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结构
对嵌套对象支持不足

四、手动实现转换逻辑
对于简单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("&", "&")
.replace("<", "<")
.replace(">", ">")
.replace("\"", """)
.replace("'", "'");
}
}优点:
完全控制转换逻辑
无第三方依赖
适合简单固定结构
缺点:
维护成本高
无法处理复杂嵌套
需自行处理特殊字符
五、方法对比与选型建议
| 方法 | 性能 | 灵活性 | 学习成本 | 适用场景 |
|---|---|---|---|---|
| Jackson | 高 | 高 | 中 | 企业级复杂项目 |
| org.json | 中 | 中 | 低 | 快速原型开发 |
| json-lib | 低 | 低 | 低 | 遗留系统维护(不推荐) |
| 手动实现 | 低 | 自定义 | 高 | 固定简单结构 |
最佳实践建议:
优先选择Jackson方案处理生产环境复杂需求
快速验证时使用org.json简化开发
完全避免使用已停止维护的json-lib
仅在结构固定且无需维护时考虑手动实现
六、进阶技巧
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符合目标系统的解析规范。
本文由@战地网 原创发布。
该文章观点仅代表作者本人,不代表本站立场。本站不承担相关法律责任。
如若转载,请注明出处:https://www.zhanid.com/biancheng/4613.html




















