结果

原始

# 原始
{"head":{"opCode":"0202","bankCode":"04160000","cityCode":"370800"},"param":{"accountNo":"A20220101","accountMainNo":"A202201","type":"0","contractNo":"CN20220923050601","tradeAmount":"2000000","mode":"01","bankSerial":"SS2022092317210102","settle":"02","outletNo":"","tellerNo":""}}
# 转xml后
<?xml version='1.0' encoding='UTF-8'?><root><Head><opCode>0202</opCode><bankCode>04160000</bankCode><cityCode>370800</cityCode></Head><Param><accountNo>A20220101</accountNo><accountMainNo>A202201</accountMainNo><type>0</type><contractNo>CN20220923050601</contractNo><tradeAmount>2000000</tradeAmount><mode>01</mode><bankSerial>SS2022092317210102</bankSerial><settle>02</settle><outletNo></outletNo><tellerNo></tellerNo></Param></root>
# xml转json后
{"head":{"bankCode":"04160000","cityCode":"370800","opCode":"0202"},"param":{"mode":"01","tradeAmount":"2000000","contractNo":"CN20220923050601","accountNo":"A20220101","settle":"02","type":"0","accountMainNo":"A202201","bankSerial":"SS2022092317210102"}}

引入依赖

		<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>

工具类

package com.chinaums.mqy.util;

import com.google.gson.*;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element; import java.util.*; /**
* xml和json互转工具类
*
* @author DaenMax
*/
public class XmlToJsonUtil {
/**
* json转到xml
*
* @param json
* @return
*/
public static String jsonToXml(String json) {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("root"); //添加一个根节点,根据你自己的需求进行修改
JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
Element ee = toXml(jsonObject, root, null);
String xml = ee.asXML();
//下面这行的拼接头部和替换大小写根据自己的需求进行抉择是否删除
String replace = "<?xml version='1.0' encoding='UTF-8'?>" + xml.replace("head>", "Head>").replace("param>", "Param>");
return replace;
} private static Element toXml(JsonElement jsonElement, Element parentElement, String name) {
if (jsonElement instanceof JsonArray) {
//是json数据,需继续解析
JsonArray sonJsonArray = (JsonArray) jsonElement;
for (int i = 0; i < sonJsonArray.size(); i++) {
JsonElement arrayElement = sonJsonArray.get(i);
toXml(arrayElement, parentElement, name);
}
} else if (jsonElement instanceof JsonObject) {
//说明是一个json对象字符串,需要继续解析
JsonObject sonJsonObject = (JsonObject) jsonElement;
Element currentElement = null;
if (name != null) {
currentElement = parentElement.addElement(name);
}
Set<Map.Entry<String, JsonElement>> set = sonJsonObject.entrySet();
for (Map.Entry<String, JsonElement> s : set) {
toXml(s.getValue(), currentElement != null ? currentElement : parentElement, s.getKey());
}
} else {
//说明是一个键值对的key,可以作为节点插入了
addAttribute(parentElement, name, jsonElement.getAsString());
}
return parentElement;
} private static void addAttribute(Element element, String name, String value) {
//增加子节点,并为子节点赋值
Element el = element.addElement(name);
el.addText(value);
} /**
* xml转到json
*
* @param xml
* @return
*/
public static String xmlToJson(String xml) {
Map<String, Object> map = new HashMap<>();
String xmlR = xml;
//下面这行的替换大小写根据自己的需求进行抉择是否删除
xmlR = xmlR.replace("Head>", "head>").replace("Param>", "param>");
try {
Document doc = DocumentHelper.parseText(xmlR);
Element root = doc.getRootElement();
map.put(root.getName(), iterateElement(root));
//这里随便找个算法进行map转到json返回即可,是否直接全部取还是取root根据自己的需求进行抉择是否删除
String json = JsonUtils.toJson(map.get("root"));
return json;
} catch (Exception e) {
e.printStackTrace();
return null;
}
} private static Map iterateElement(Element element) {
List el = element.elements();
Element et = null;
Map obj = new HashMap();
Object temp;
List list = null;
for (int i = 0; i < el.size(); i++) {
list = new LinkedList();
et = (Element) el.get(i);
if (et.getTextTrim().equals("")) {
if (et.elements().size() == 0)
continue;
if (obj.containsKey(et.getName())) {
temp = obj.get(et.getName());
if (temp instanceof List) {
list = (List) temp;
list.add(iterateElement(et));
} else if (temp instanceof Map) {
list.add((HashMap) temp);
list.add(iterateElement(et));
} else {
list.add((String) temp);
list.add(iterateElement(et));
}
obj.put(et.getName(), list);
} else {
obj.put(et.getName(), iterateElement(et));
}
} else {
if (obj.containsKey(et.getName())) {
temp = obj.get(et.getName());
if (temp instanceof List) {
list = (List) temp;
list.add(et.getTextTrim());
} else if (temp instanceof Map) {
list.add((HashMap) temp);
list.add(iterateElement(et));
} else {
list.add((String) temp);
list.add(et.getTextTrim());
}
obj.put(et.getName(), list);
} else {
obj.put(et.getName(), et.getTextTrim());
} } }
return obj;
} public static void main(String[] args) throws Exception {
String testJson = "{\"head\":{\"opCode\":\"0202\",\"bankCode\":\"04160000\",\"cityCode\":\"370800\"},\"param\":{\"accountNo\":\"A20220101\",\"accountMainNo\":\"A202201\",\"type\":\"0\",\"contractNo\":\"CN20220923050601\",\"tradeAmount\":\"2000000\",\"mode\":\"01\",\"bankSerial\":\"SS2022092317210102\",\"settle\":\"02\",\"outletNo\":\"\",\"tellerNo\":\"\"}}";
System.out.println(testJson);
String toXml = jsonToXml(testJson);
System.out.println(toXml);
String toJson = xmlToJson(toXml);
System.out.println(toJson);
}
}

例外

另外有java XML字符串和bean实体类互转代码,地址:https://www.cnblogs.com/daen/p/16249882.html

java XML字符串和json字符串互转的更多相关文章

  1. java普通对象和json字符串的互转

    一.java普通对象和json字符串的互转 java对象---->json 首先创建一个java对象: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 ...

  2. <摘录>Gson对Java嵌套对象和JSON字符串之间的转换

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性.近几年来已经和XML一样成为C/S架构中广泛采用的数据格式.有关JSON的更多知识, ...

  3. xml字符串转json字符串

    XML字符串转JSON字符串网上的方法很多,这里主要推荐两种: 1.使用org.json包 jar地址:http://mvnrepository.com/artifact/org.json/json ...

  4. Java实现微信菜单json字符串拼接

    Java实现微信菜单json字符串拼接 微信菜单拼接json字符串方法 >>>>>>>>>>>>>>>> ...

  5. 转换成json字符串,与json字符串转换成java类型都要先转换成json对象

    转换成json字符串,与json字符串转换成java类型都要先转换成json对象

  6. Java对象转换成Json字符串是无法获得对应字段名

    问题: 代码中已经标注 @JSONField(name = "attrs") private String abc; public String getA() { return a ...

  7. 【Java_Spring】java解析多层嵌套json字符串

    java解析多层嵌套json字符串    

  8. JSON字符串 与 JSON对象 互转

    一,JSON字符串与JSON对象的区别 JSON对象是符合JSON格式的对象,可以用"对象.属性"进行存取值; JSON字符串是符合JSON格式的字符串; 二,JSON字符串-&g ...

  9. 在java代码中显示json字符串(怎么避免json字符串中双引号在java代码中显示)

    String log = "eyJvcmRlckluZm8iOnsiaWQiOjEwNzQwNCwib3JkZXJJZCI6MjczNjQyMSwicHJvZHVjdENvZGUiOjQ1N ...

  10. Java 利用Gson将json字符串转换为List<Map<String, String>>

    json字符串类似于: [ { "userPhone": "123", "userNo": "123-2", " ...

随机推荐

  1. 在ubuntu系统下,安装opencv各个版本

    要在Linux系统上安装OpenCV库,你可以通过包管理器(如apt)来安装.以下是详细的步骤,包括如何在/usr/local/lib或/usr/lib/x86_64-linux-gnu目录下安装Op ...

  2. Ubuntu22.04双网卡调试

    最近捡起正点原子的linux开发板,又开始了linux的学习,这条路走走停停的,隔了一年时间很多积累的东西都忘了.打开VMware虚拟机发现网络也连接不上了,我的印象中去年是把虚拟机的双网卡配置好了, ...

  3. JMeter 线程编号 __threadNum 获取不到

    场景: 在 BeanShell PreProcessor 中,使用 vars.get("__threadNum") 获取不到当前线程数,如: import org.apache.j ...

  4. xshell连接Win10下子系统Unbuntu

    自带的ssh server不好用,需要先卸载再安装. 1. 卸载 ssh server sudo apt-get remove openssh-server 2. 安装 ssh server sudo ...

  5. emlog pro 文章编辑器(editor.md)的快捷键

    这里是一张图片,上面显示目前 emlog pro 编辑器所有**有效**的快捷键 (注意,是有效的快捷键,与 editor.md 官方公布的有出入,有些在系统是不可用的),对于长期使用emlog写作的 ...

  6. MySQL性能调优必知:Performance Schema引擎的配置与使用

    当你在MySQL高并发情况下的进行性能调优时,需要知道调整后的影响.例如查询是否变快了?锁是否会减慢运行速度?内存使用情况如何?磁盘IO等待时间变了吗? . Performance Schema就有一 ...

  7. 在 ThinkPHP 6 控制器中使用文件锁机制

    创建锁管理类 首先,创建一个锁管理类来处理文件锁: namespace app\common\service; use Exception; class LockManager { private $ ...

  8. 【Markdown】公式指导手册

    点击跳转至 Cmd Markdown 简明语法手册 ,立刻开始 Cmd Markdown 编辑阅读器的记录和写作之旅! 本文为 MathJax 在 Cmd Markdown 环境下的语法指引. Cmd ...

  9. 【WinForm】使用选择文件的窗口样式选择文件夹

    使用选择文件的窗口样式选择文件夹 零.需求 传统的选择文件夹的方式太小了,不好操作,不过选择文件的方式倒是挺不错的,能不能把选择文件夹的方式改为选择文件这种样式呢? 选择文件夹 选择文件 壹.解决 1 ...

  10. 理解Rust引用及其生命周期标识(下)

    在上一篇文章中,我们围绕 "引用必然存在来源" 这一基本概念,介绍了Rust中引用之间的关系,以及生命周期标记的实际意义.我们首先从最简单的单参数方法入手,通过示例说明了返回引用与 ...