一、简介
Jackson解析的速度算是同类框架中最快的,同时也是Spring MVC中内置使用的解析方式。
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。
二、JackSon的使用
Jackson提供了很多类和方法,而在序列化和反序列化中使用的最多的类则是ObjectMapper这个类,此类比较类似于Json-lib中JsonObject和ArrayObject。此类中提供了readTree(),readValue(),writeValueAsString()等方法用于转换。具体关于此类的说明文档地址是:http://tool.oschina.net/uploads/apidocs/jackson-1.9.9/org/codehaus/jackson/map/ObjectMapper.html
下面中所涉及到的objectMapper均是来至于ObjectMapper objectMapper = new ObjectMapper()。
1、导入jar包
//maven公共直接导入依赖
com.fasterxml.jackson.core
jackson-databind
2、创建Object类
/*例如创建一个雇员类*/
public classEmployee {private intid;privateString name;private int age;
...省略getter、setter
}
Json格式的文件data.json如下:
{
"id" : 123,
"name" : "Henry Smith",
"age" : 28,
"salary" : 2000
}
1、通过文件将Json与对象相互转换
public void testJsonToObject() throwsJsonParseException, JsonMappingException, IOException{
ObjectMapper objectMapper= newObjectMapper();
//将json格式数据从文件读入,并转换为对象
Employee emp= objectMapper.readValue(new File("src/data.json"), Employee.class);
System.out.println(emp.toString());
}public void testObjectTojson() throwsJsonParseException, JsonMappingException, IOException{
ObjectMapper objectMapper= newObjectMapper();
Employee emp= objectMapper.readValue(new File("src/data.json"), Employee.class);//将对象转化为json格式,并存入到文件中
objectMapper.writeValue(new File("src/data1.json"), emp);//将对象转化为json格式数据,并输出到控制台上
objectMapper.writeValue(System.out, emp);
2、通过I/O流将Json与对象相互转换
public void testInputStream() throwsJsonParseException, JsonMappingException, IOException{
//创建ObjectMapper对象
ObjectMapper objectMapper= newObjectMapper();
//将json格式数据从文件读入,并转换为对象
Employee emp= objectMapper.readValue(new FileInputStream("src/data.json"), Employee.class);
System.out.println(emp.toString());
}public void testOutPutStream() throwsJsonParseException, JsonMappingException, IOException{
ObjectMapper objectMapper= newObjectMapper();
Employee emp= objectMapper.readValue(new File("src/data.json"), Employee.class);//将对象转化为json格式,并存入到文件中
objectMapper.writeValue(new FileOutputStream("src/data1.json"), emp);
3、从URL中读取数据(若URL返回的满足Employee类的json数据)
Employee emp1 = objectMapper.readValue("http://www.xxx.com/xxx", Employee.class);
JsonNode jsonNode= objectMapper.readTree("http://www.xxx.com/xxx");
4、常用方法
可通过ObjectMapper类实现Json格式数据与Object转换
代码实例,可抽取为JsonUtils
packagecom.example;importjava.util.List;importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml.jackson.databind.JavaType;importcom.fasterxml.jackson.databind.ObjectMapper;/****/
public classJsonUtils {//定义jackson对象
private static final ObjectMapper MAPPER = newObjectMapper();/*** 将对象转换成json字符串。
*
Title: pojoToJson
*
Description:
*@paramdata
*@return
*/
public staticString objectToJson(Object data) {try{
String string=MAPPER.writeValueAsString(data);returnstring;
}catch(JsonProcessingException e) {
e.printStackTrace();
}return null;
}/*** 将json结果集转化为对象
*
*@paramjsonData json数据
*@paramclazz 对象中的object类型
*@return
*/
public static T jsonToPojo(String jsonData, ClassbeanType) {try{
T t=MAPPER.readValue(jsonData, beanType);returnt;
}catch(Exception e) {
e.printStackTrace();
}return null;
}/*** 将json数据转换成pojo对象list
*
Title: jsonToList
*
Description:
*@paramjsonData
*@parambeanType
*@return
*/
public static List jsonToList(String jsonData, ClassbeanType) {
JavaType javaType= MAPPER.getTypeFactory().constructParametricType(List.class, beanType);try{
List list =MAPPER.readValue(jsonData, javaType);returnlist;
}catch(Exception e) {
e.printStackTrace();
}return null;
}
}
View Code