java xml轉(zhuǎn)為json的n種方法
java xml轉(zhuǎn)為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 } } }
從效果來看,明顯是第二種方法,比第一種好。
下面把代碼貼出出來
第一種實(shí)現(xiàn):用到的包是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(); } }
第二種實(shí)現(xiàn):用的org.json包,
在用org.json包的時(shí)候,需要把spring-boot-starter-test中的,android-json排除,要不然會(huì)報(bào)錯(cuò):
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>
實(shí)現(xiàn)方法簡單:
org.json.JSONObject xmlJSONObj = null; try { xmlJSONObj = XML.toJSONObject(xml); log.debug("json:" + xmlJSONObj.toString() ); } catch (JSONException e) { e.printStackTrace(); }
到此這篇關(guān)于java xml轉(zhuǎn)為json的兩種方法的文章就介紹到這了,更多相關(guān)java xml轉(zhuǎn)json內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot系列教程之7步集成RabbitMQ的方法
RabbitMQ 即一個(gè)消息隊(duì)列,主要是用來實(shí)現(xiàn)應(yīng)用程序的異步和解耦,同時(shí)也能起到消息緩沖,消息分發(fā)的作用。下面這篇文章主要給大家介紹了關(guān)于Spring Boot之7步集成RabbitMQ的相關(guān)資料,需要的朋友可以參考下2018-11-11JAVA動(dòng)態(tài)維度笛卡爾積輸出的實(shí)現(xiàn)
本文主要介紹了JAVA動(dòng)態(tài)維度笛卡爾積輸出的實(shí)現(xiàn),通過動(dòng)態(tài)生成笛卡爾積,可以方便地處理多維數(shù)據(jù)集,提高數(shù)據(jù)處理效率,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02基于Spring p標(biāo)簽和c標(biāo)簽注入方式
這篇文章主要介紹了Spring p標(biāo)簽和c標(biāo)簽注入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09springboot項(xiàng)目啟動(dòng)自動(dòng)跳轉(zhuǎn)到瀏覽器的操作代碼
這篇文章主要介紹了springboot項(xiàng)目啟動(dòng)自動(dòng)跳轉(zhuǎn)到瀏覽器的操作代碼,本文圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03java多線程加鎖以及Condition類的使用實(shí)例解析
這篇文章主要介紹了java多線程加鎖以及Condition類的使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Java?常量池詳解之class文件常量池?和class運(yùn)行時(shí)常量池
這篇文章主要介紹了Java?常量池詳解之class文件常量池?和class運(yùn)行時(shí)常量池,常量池主要存放兩大類常量:字面量,符號(hào)引用,本文結(jié)合示例代碼對(duì)java class常量池相關(guān)知識(shí)介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12