java xml转为json的两种方法
java xml转为json的两种方法
<?xml version="1.0" encoding="utf-8" ?><auibinsurancecallback><policyinfo><transtype>TKTS</transtype><eticketno>xxx</eticketno><flightnumber>xxx</flightnumber><flightdate>2019-10-16</flightdate><operatetime>2019-10-16 17:20:00</operatetime><insureno>1910161720056066735</insureno><agreeno>102160199</agreeno><policyno></policyno><policyurl><!--[CDATA[]]--></policyurl></policyinfo><returninfo><serialnumber>2019103015284949545354</serialnumber><retruncode>0</retruncode><errormessage><!--[CDATA[xxx]]--></errormessage></returninfo></auibinsurancecallback>";
先来看效果,效果一:
{
"auibinsurancecallback": {
"returninfo": [
{
"retruncode": [
"0"
],
"serialnumber": [
"2019103015284949545354"
]
}
],
"policyinfo": [
{
"operatetime": [
"2019-10-16 17:20:00"
],
"transtype": [
"TKTS"
],
"flightdate": [
"2019-10-16"
],
"insureno": [
"1910161720056066735"
],
"flightnumber": [
"xxx"
],
"agreeno": [
"102160199"
],
"eticketno": [
"xxxx"
]
}
]
}
}
效果二:
{
"auibinsurancecallback": {
"returninfo": {
"errormessage": "",
"retruncode": 0,
"serialnumber": 2.0191030152849496e+21
},
"policyinfo": {
"policyurl": "",
"operatetime": "2019-10-16 17:20:00",
"transtype": "TKTS",
"flightdate": "2019-10-16",
"insureno": 1910161720056066800,
"flightnumber": "xxx",
"agreeno": 102160199,
"policyno": "",
"eticketno": xxx
}
}
}
从效果来看,明显是第二种方法,比第一种好。
下面把代码贴出出来
第一种实现:用到的包是fastjson, jdom2
public static JSONObject xml2JSON(byte[] xml) throws JDOMException, IOException {
JSONObject json = new JSONObject();
InputStream is = new ByteArrayInputStream(xml);
SAXBuilder sb = new SAXBuilder();
org.jdom2.Document doc = sb.build(is);
Element root = doc.getRootElement();
json.put(root.getName(), iterateElement(root));
return json;
}
private static JSONObject iterateElement(Element element) {
List node = element.getChildren();
Element et = null;
JSONObject obj = new JSONObject();
List list = null;
for (int i = 0; i < node.size(); i++) {
list = new LinkedList();
et = (Element) node.get(i);
if (et.getTextTrim().equals("")) {
if (et.getChildren().size() == 0)
continue;
if (obj.containsKey(et.getName())) {
list = (List) obj.get(et.getName());
}
list.add(iterateElement(et));
obj.put(et.getName(), list);
} else {
if (obj.containsKey(et.getName())) {
list = (List) obj.get(et.getName());
}
list.add(et.getTextTrim());
obj.put(et.getName(), list);
}
}
return obj;
}
@Test
public void xml1(){
String xml = 上面贴的xml;
JSONObject json= null;
try {
json = xml2JSON(xml.getBytes());
System.out.println(json.toJSONString());
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
第二种实现:用的org.json包,
在用org.json包的时候,需要把spring-boot-starter-test中的,android-json排除,要不然会报错:
java.lang.NoSuchMethodError: org.json.JSONTokener.<init>(Ljava/io/Reader;)V
java.lang.NoSuchMethodError: org.json.JSONObject.put(Ljava/lang/String;Ljava/util/Collection;)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
</exclusion>
</exclusions>
</dependency>
实现方法简单:
org.json.JSONObject xmlJSONObj = null;
try {
xmlJSONObj = XML.toJSONObject(xml);
log.debug("json:" + xmlJSONObj.toString() );
} catch (JSONException e) {
e.printStackTrace();
}
转载:https://www.cnblogs.com/achengmu/p/15190645.html
java xml转为json的两种方法的更多相关文章
- JAVA 集合 List 分组的两种方法
CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...
- java字符串大小写转换的两种方法
转载自:飞扬青春sina blogjava字符串大小写转换的两种方法 import java.io..* public class convertToPrintString { pu ...
- C# web api返回类型设置为json的两种方法
web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...
- C# web api 返回类型设置为json的两种方法
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...
- Ajax中解析Json的两种方法
eval(); //此方法不推荐 JSON.parse(); //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: var jsonDate = '{ "name" ...
- Ajax中解析Json的两种方法详解
eval(); //此方法不推荐 JSON.parse(); //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: var jsonDate = '{ "name&qu ...
- C#把Xml转换为DataSet的两种方法
转:https://blog.csdn.net/beyondqd/article/details/6724676 下面给出两个实现XML数据转成DataSet的两个方法. 第1种: //通过传入的特定 ...
- 解析JSON的两种方法eval()和JSON.parse()
解析JSON 一种方法是使用eval函数. var dataObj = eval("("+json+")"); 必须把文本包围在括号中,这样才能避免语法错误,迫 ...
- java连接Access数据库的两种方法
where ziduan in(select ziduan from table) 嵌套 ResultSet rs = pst.executeQuery();List list = new Ar ...
- Java获得键盘输入的两种方法
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
随机推荐
- File类的基本用法
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- MySQL 常用命令(2)------数据库操作
四.数据库操作 1.创建数据库 注意:创建数据库前要先连接mysql数据库 语法:create database <数据库名> 例:创建数据库并分配用户 1.create database ...
- Linux下的zip和tar压缩解压缩命令详解
一.zip压缩工具 zip的压缩包在windows和linux中都比较常用,它可以压缩目录和文件,压缩时录时,需要指定目录下的文件.zip后面先跟目标文件名,即压缩后得自定义压缩包名,然后跟要压缩的文 ...
- 根据STM32CubeMX软件创建STM32芯片的Altium Designer原理图库教程-转载
(24条消息) 根据STM32CubeMX软件创建STM32芯片的Altium Designer原理图库教程_奥比克_阿彦少爷的博客-CSDN博客_stm32原理图库 1所需软件及环境1.STM32C ...
- Redis如何找出并快速删除亿级指定前缀的key
背景 由于Redis的单线程服务模式,命令keys *会阻塞正常的业务请求,不建议使用keys * pattern的方法进行查询,可能会使服务器卡顿而出现事故.如何获取指定的 key? 可以采用Red ...
- 解决PageHelper分页不正常,pages始终等于1,total 始终等于pageSize的问题
问题 pages始终等于1,total 始终等于pageSize 原因 原因是我在查询到list数据之后,对list做了操作,导致分页不正常 // 这是service层的类 public PageIn ...
- 个人js基础知识及看js高级程序设计查漏 汇总
1.事件循环机制 js单线程操作. 1>主线程读取js代码 ,此时为同步环境,形成相应的堆和执行栈. 2>主线程遇到异步任务,指给对应的异步进程处理. 3>异步进程处理完毕后,将相应 ...
- js apply 与 call
简介 用来调用方法,第一个参数替换掉用方法的this对象 区别:call:A.fn.call(B, arg1,arg2,argn...),后面的参数用逗号分隔 apply:A.fn.apply(B, ...
- mybatis-generator 生成实体类,表字段类型有text,longtext,生成**WithBLOBs解决办法
modeType="flat" 其他参数请查询文档http://www.youbiji.cn/doc/mybatis/xml-table.html
- Web实时通信之SignalR
前言 对于B/S模式的项目,基础的场景都是客户端发起请求,服务端返回响应结果就结束了一次连接:但在很多实际应用场景中,这种简单的请求和响应模式就显得很吃力,比如消息通知.监控看板信息自动刷新等实时通信 ...