将xml数据转换为json对象
本文在上文的基础上(上文用的普通Java项目,实际项目中我用的是spring boot项目),讲解如何将xml数据转化为json对象!!话不多说,直接上代码!!
本节需要用到dom4j和fastjson jar包,下图是我引得版本
下边是我写的一个转换工具类,参数是String类型 xml数据,返回JSONObject
package com.uv.phenix.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import java.util.List;
/**
* Created by 于振坤 on ${DATA}.
*/
public class XmltoJsonUtil {
/**
* 将xml转换为json对象
*/
public static JSONObject xmlToJson(String xml) throws DocumentException {
JSONObject jsonObject = new JSONObject();
Document document = DocumentHelper.parseText(xml);
//获取根节点元素对象
Element root = document.getRootElement();
iterateNodes(root, jsonObject);
return jsonObject;
}
/**
* 遍历元素
* @param node
* @param json
*/
private static void iterateNodes(Element node, JSONObject json) {
//获取当前元素名称
String nodeName = node.getName();
//判断已遍历的JSON中是否已经有了该元素的名称
if(json.containsKey(nodeName)){
//该元素在同级下有多个
Object Object = json.get(nodeName);
JSONArray array = null;
if(Object instanceof JSONArray){
array = (JSONArray) Object;
}else {
array = new JSONArray();
array.add(Object);
}
//获取该元素下所有子元素
List<Element> listElement = node.elements();
if(listElement.isEmpty()){
//该元素无子元素,获取元素的值
String nodeValue = node.getTextTrim();
array.add(nodeValue);
json.put(nodeName, array);
return ;
}
//有子元素
JSONObject newJson = new JSONObject();
//遍历所有子元素
for(Element e:listElement){
//递归
iterateNodes(e,newJson);
}
array.add(newJson);
json.put(nodeName, array);
return ;
}
//该元素同级下第一次遍历
//获取该元素下所有子元素
List<Element> listElement = node.elements();
if(listElement.isEmpty()){
//该元素无子元素,获取元素的值
String nodeValue = node.getTextTrim();
json.put(nodeName, nodeValue);
return ;
}
//有子节点,新建一个JSONObject来存储该节点下子节点的值
JSONObject object = new JSONObject();
for(Element e:listElement){
//递归
iterateNodes(e,object);
}
json.put(nodeName, object);
return ;
}
}
测试:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.uv.phenix.modle.ResultVO;
import com.uv.phenix.util.XmltoJsonUtil;
import com.uv.phenix.xiruanWsdl.Service;
import com.uv.phenix.xiruanWsdl.XRHotelServiceSoap;
import org.dom4j.DocumentException;
public class Main {
public static void main(String[] args) {
XRHotelServiceSoap soap = new Service().getBasicHttpBindingXRHotelServiceSoap();
String str = soap.queryGuest("I");
System.out.println(str);
try {
JSONObject object = XmltoJsonUtil.xmlToJson(str);
System.out.println(object);
Object items = object.get("interface");
System.out.println(items);
ResultVO vo = JSON.parseObject(items.toString(), ResultVO.class);
System.out.println(vo);
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
这样就将xml数据转换为json对象,我在main方法中使用fastJson,最终获取到获取到的VO实体!!