原文地址https://blog.csdn.net/a532672728/article/details/76312475
最近有個需求,要將xml轉json之后存儲在redis中,找來找去發現整體來說有兩種方法,使用json-lib包中的net.sf.json或者使用org.json,這里將兩種方式的實現代碼寫下來記錄一下,以后方便拿來直接用了,省的來回找了。
第一種方式json-lib,這種方式需要的依賴包比較多,具體需要以下jar包這個從網上下載既可以了或者是利用Maven指定好依賴即可

實現代碼具體見下
public class Test { public static void ConvertXMLtoJSON() { InputStream is = Test.class.getResourceAsStream("student.xml"); String xml; try { xml = IOUtils.toString(is); System.out.println(xml); XMLSerializer xmlSerializer = new XMLSerializer(); JSON json = xmlSerializer.read(xml); System.out.println(json); System.out.println(json.toString(0)); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { Test.ConvertXMLtoJSON(); } }
簡單解釋下該代碼,
1 這里通過Class的getResourceAsStream方法獲得指定文件的輸入流,這里指定參數沒有帶/,表示Test類與xml文件在同一級目錄下,如果有/那么是從根目錄進行獲取的,
2 之后利用IOUtils的toString方法將該輸入流轉化為xml格式的字符串輸出,調用XMLSerializer的read方法接受xml格式的字符串,將其轉化為JSON對象
3 這里實際上輸出json對象和調用json對象的toString方法輸出的形式在控制台展示的是一樣的
這里隨便寫了一個xml文件
<student name="zhangsan"> <sex>man</sex> <age>18</age> </student>
對應的輸出的json
{"@name":"zhangsan","sex":"man","age":"18"}
這里只需要給出一個符合標准格式的xml文件即可,十分方便,如果是一個標簽的屬性那么會加上前綴@符號
另外一種方式是使用org.json來實現,這種方式更簡單,只需要兩個jar包即可,下載地址http://mvnrepository.com/artifact/org.json/json,隨便下載一個使用比較多的jar包版本即可,具體實現代碼見下
public class JsonUtils { public static String xml2jsonString() throws JSONException, IOException { InputStream in = JsonUtils.class.getResourceAsStream("student.xml"); String xml = IOUtils.toString(in); JSONObject xmlJSONObj = XML.toJSONObject(xml); return xmlJSONObj.toString(); } public static void main(String[] args) throws JSONException, IOException { String string = xml2jsonString(); System.out.println(string); } }
簡單對比一下使用json-lib的實現方式,前面的代碼基本一致,區別是這里使用的是org.json.XML類,調用的是toJSONObject方法,接受的是一個xml格式的字符串,生成一個JSONObject對象,這里也是一樣,調不調用jsonobject的toString方法輸出效果都一樣,xml文件內容一樣,輸出的格式見下
{"student":{"sex":"man","name":"zhangsan"}}
最后總結一下:
1 json-lib依賴的jar包很多,需要全部集齊,org.json僅僅需要兩個jar包即可實現,一個org.json另一個是commons-io
2 兩者輸出的xml格式不同,前者不帶根標簽需要手動添加,會區別標簽的屬性和子標簽,后者帶有根標簽,標簽的屬性和子標簽不會區分對待,因此根據自己的實際情況自行選擇修改即可。
PS:如果還有其他的更好的xml轉json方式,希望各位大神能告訴一下,再次先謝過了,那么這篇到此結束先了
