其實從面相對象的角度來理解這個問題,就會很清晰。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搜索引擎