Java中將xml文件轉化爲json的兩種方式

  最近一直沒有時間寫博客,忙着找房子,天天來回折騰,光地鐵費就花了不少,最後綜合各種因素考慮,決定沙河高教園,哈哈,沒錯,別人都是越搬離公司越近,我是越搬越遠,但是直覺告訴我應該沒有錯,昨天晚上剛搬完家,收拾收拾終於安定了,坑爹的二房東再見,以後如果不出什麼特殊情況的話應該是有時間寫博客了。。。。
  
  好了廢話不多說,進入正題,最近有個需求,要將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方式,希望各位大神能告訴一下,再次先謝過了,那麼這篇到此結束先了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章