java XML字符串和json字符串互转
结果
原始
# 原始
{"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字符串互转的更多相关文章
- 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 ...
- <摘录>Gson对Java嵌套对象和JSON字符串之间的转换
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性.近几年来已经和XML一样成为C/S架构中广泛采用的数据格式.有关JSON的更多知识, ...
- xml字符串转json字符串
XML字符串转JSON字符串网上的方法很多,这里主要推荐两种: 1.使用org.json包 jar地址:http://mvnrepository.com/artifact/org.json/json ...
- Java实现微信菜单json字符串拼接
Java实现微信菜单json字符串拼接 微信菜单拼接json字符串方法 >>>>>>>>>>>>>>>> ...
- 转换成json字符串,与json字符串转换成java类型都要先转换成json对象
转换成json字符串,与json字符串转换成java类型都要先转换成json对象
- Java对象转换成Json字符串是无法获得对应字段名
问题: 代码中已经标注 @JSONField(name = "attrs") private String abc; public String getA() { return a ...
- 【Java_Spring】java解析多层嵌套json字符串
java解析多层嵌套json字符串
- JSON字符串 与 JSON对象 互转
一,JSON字符串与JSON对象的区别 JSON对象是符合JSON格式的对象,可以用"对象.属性"进行存取值; JSON字符串是符合JSON格式的字符串; 二,JSON字符串-&g ...
- 在java代码中显示json字符串(怎么避免json字符串中双引号在java代码中显示)
String log = "eyJvcmRlckluZm8iOnsiaWQiOjEwNzQwNCwib3JkZXJJZCI6MjczNjQyMSwicHJvZHVjdENvZGUiOjQ1N ...
- Java 利用Gson将json字符串转换为List<Map<String, String>>
json字符串类似于: [ { "userPhone": "123", "userNo": "123-2", " ...
随机推荐
- jQuery ajax 文件上传 Request Headers 缺少 boundary
原文地址: https://blog.jijian.link/2020-07-28/jquery-ajax-upload-file/ 一般上传方式 const file = document.getE ...
- canvas 获取图片中某个坐标的颜色
同步发布:https://blog.jijian.link/2020-04-05/canvas-get-color/ 由于功能受限,此处不能放 iframe 嵌入链接,如需看到实时效果,请移步 htt ...
- 如何用js精确计算一行文字的宽度
之前有做过一个业务,需要在文本框输入文字的时候动态计算一行文字的宽度.并由此知道当前输入的这段文字会有几行. 如何计算? 每个文字的个数*宽度?理论上可行,但是有一个问题是不同类型的文字对应的宽度是不 ...
- go sync.map的使用
前言 数据竞争是并发情况下,存在多线程/协程读写相同数据的情况,必须存在至少一方写.另外,全是读的情况下是不存在数据竞争的. Go语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全 ...
- AI Agent爆火后,MCP协议为什么如此重要!
什么是MCP? 模型上下文协议(Model Context Protocol, MCP)是一种专为机器学习模型服务设计的通信协议,旨在高效管理模型推理过程中的上下文信息(如会话状态.环境变量.动态配置 ...
- Open R1 项目进展第一期
DeepSeek R1 发布已经两周了,而我们启动 open-r1 项目--试图补齐它缺失的训练流程和合成数据--也才过了一周.这篇文章简单聊聊: Open-R1 在模仿 DeepSeek-R1 流程 ...
- 新更新 Scanner键盘输入
原来我们都是将写好的代码进行打印,这是硬程序,如果我们想让电脑实时输入我们想要的值,就需要使用Scanner进行键盘录入 1.让电脑找到Scanner符咒(电脑自动) 2.召唤Scanner精灵 3. ...
- 【JDBC第7章】DAO及相关实现类
第7章:DAO及相关实现类 DAO:Data Access Object访问数据信息的类和接口,包括了对数据的CRUD(Create.Retrival.Update.Delete),而不包含任何业务相 ...
- 开箱即用!推荐一款Python开源项目:DashGo,支持定制改造为测试平台!
大家好,我是狂师. 市面上的开源后台管理系统项目层出不穷,对应所使用到的技术栈也不尽相同. 今天给大家推荐一款开源后台管理系统: DashGo,不仅部署起来非常的简单,而且它是基于Python技术栈实 ...
- Windows与Linux通过Samba共享文件夹
Ubuntu系统,按如下步骤执行: 1.安装samba服务 sudo apt update sudo apt install samba -y 2.创建共享目录 sudo mkdir -p /home ...