json、xml和java對象之間的轉化


其實從面相對象的角度來理解這個問題,就會很清晰。java中的一切皆對象即把世間萬物(Everything in the world)看做java對象,任何處理不了的問題都可以先轉化成java對象在做處理。

一、處理json數據:處理json數據目前主流的有四種方法,在不同的場景之中我們可以選擇合適轉化方式

1.首先是阿里巴巴的fastJson,這種號稱擁有最快的處理json數據的能力,先帖代碼

fastjson生成json字符串(JavaBean,List<JavaBean>,List<String>,List<Map<String,Object>)

String jsonStrng = JSON.toJSONString(object);

 fastjson 解析json字符串為四種類型

      1. JavaBean

          Person person = JSON.parseObject(jsonString, Person.class);

      2. List<JavaBean>

          List<Person> listPerson =JSON.parseArray(jsonString, Person.class);

      3. List<String>

          List<String> listString = JSON.parseArray(jsonString, String.class);

      4. List<Map<String,Object>>

          List<Map<String, Object>> listMap = JSON.parseObject(jsonString, new TypeReference<List<Map<String,Object>>>(){});  (注意:此處可看出fastjson反射機制比gson更准確, id = 1001 通過fastjson反射仍是 id = 1001 , 而通過gson反射結果 為 id =1001.0 ,

第一種是把java對象轉化成json字符串(沒什么好講的),解析json個人感覺主要是第一個用的比較廣泛,因為既然是對象(一切皆對象),那么使用(Person person = JSON.parseObject(jsonString, Person.class))應該就可以處理大部分的場景了。

2.然后是谷歌的

 Gson gson = new Gson();
Gson 解析json字符串Person person = gson.fromJson(jsonData,Person.class);因為解析的json數據可能不同,所以可以通過泛型對Gson封裝………

3.利用Jackson進行json解析和序列化ObjectMapper mapper = new ObjectMapper();  

//Object轉json  String json = mapper.writeValueAsString(user);  //JSON反序列化User user = mapper.readValue(json, User.class);

 重點來了:以上不管哪種方法序列化和反序列化得到的都是純凈的json,這個很重要,在實際解析的時候,要根據實際場景做出判斷

XStream也可以進行json數據的轉化,但是它得到的json對象里面是包含對應包名的

4.

連續的沒有分隔的json串
XStream stream = new XStream(new JettisonMappedXmlDriver);
格式化良好的json串
XStream stream = new XStream(new JsonHierachicalStreamDriver);

二、目前主流的對xml數據轉化的方法是XStream
XStream stream = new XStream();
stream.alias("object",Object.class);
對類對象進行重命名
具體的使用方法可以查看API文檔
同時還有很多其他的O/X Mapping開源項目,比如JAXB、XMLBeans等,大家可以自己去了解。在spring中也對oxm進行了統一層的抽象和封裝。它有兩個核心的接口Marshaller和Unmarsshaller,實現這兩個接口可以實現從java對象到xml的映射轉換。


下一篇內容---ES搜索引擎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM