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