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搜索引擎

posted @ 2017-03-01 20:27  Jack.London  阅读(9093)  评论(0编辑  收藏  举报