1. 程式人生 >程式設計 >java xml轉為json的n種方法

java xml轉為json的n種方法


xml轉為on的兩種方法

<?xml version="1.0" encoding="utf-8" ?>
<auibinsurancecallback>
<policyinfo>
<transtype>TKTS&lt;/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"
        ],www.cppcns.com     "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)http://www.cppcns.com;
            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);
       www.cppcns.com     }
        }
        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中的,-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();
       }

到此這篇關於java xml轉為json的兩種方法的文章就介紹到這了,更多相關java xml轉json內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!