java xml转为json的两种方法
阅读原文时间:2023年07月09日阅读:1

java xml转为json的两种方法

TKTSxxxxxx2019-10-162019-10-16 17:20:00191016172005606673510216019920191030152849495453540";

先来看效果,效果一:

{
"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.(Ljava/io/Reader;)V

java.lang.NoSuchMethodError: org.json.JSONObject.put(Ljava/lang/String;Ljava/util/Collection;)

org.springframework.boot spring-boot-starter-test test com.vaadin.external.google android-json

实现方法简单:

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