Jackson学习
Jackson概述
Jackson框架是一套基于Java平台的一套数据处理工具。从 Github 中的统计来看,Jackson 是最流行的 json 解析器之一 。
为啥学习Jackson
SpringMvc的默认json解析器是Jackson。
依赖
Jackson核心组件
jackson-core,核心包
jackson-annotations,注解包
jackson-databind,数据绑定包
<!-- jackson-databind 依赖jackson-core和jackson-annotations,当添加jackson-databind之后,jackson-core和jackson-annotations也随之添加到Java项目工程中.在添加相关依赖包之后,就可以使用Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.1</version>
</dependency>
Jackson常用功能
//示例
public class son{
private String name;
private int age;
public String getName() {
return this.name;
}
public void setName(String name){
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge (int age) {
this.age = age;
}
}
-
对象转String
ObjectMapper objectMapper = new ObjectMapper(); Son son = new Son("小明", 10); String sonString = null; try { sonString = objectMapper.writeValueAsString(son); } catch (JsonProcessingException e) { e.printStackTrace(); }
-
String转对象
//省略了部分代码,这里的sonString就是1的sonString Son sonEntity = objectMapper.readValue(sonString, Son.class);
-
InputStream读取对象
Son sonInputStream = objectMapper.readValue(inputStream,Son.class);
-
从字节数组中读取对象
byte[] bytes = sonString.getBytes("UTF-8"); Son son = objectMapper.readValue(bytes,Son.class);
-
从json中读取对象数组
String jsonArray = "[{\"name\":\"son1\"},{\"name\":\"son1\"}]"; ObjectMapper objectMapper = new ObjectMapper(); Son[] sons = objectMapper.readValue(jsonArray, Son[].class);
-
从json中读取列表
//Son需要有空构造 String jsonArray = "[{\"name\":\"son1\"},{\"name\":\"son1\"}]"; ObjectMapper objectMapper = new ObjectMapper(); List<Son> sons = objectMapper.readValue(jsonArray, new TypeReference<List<Son>>(){}); //----------------------------------------- //同理 String jsonArray = "[{\"name\":\"son1\"},{\"name\":\"son1\"}]"; ObjectMapper objectMapper = new ObjectMapper(); CollectionType collectionType = objectMapper.getTypeFactory().constructCollectionType(List.class, Son.class); List<Son> sons = objectMapper.readValue(jsonArray,collectionType);
-
自定义序列化
public class AlexDoubleSerializer extends JsonSerializer<Double> { @Override public void serialize(Double aDouble, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { if (aDouble != null){ BigDecimal divide = new BigDecimal(aDouble).setScale(2,BigDecimal.ROUND_DOWN); jsonGenerator.writeString(divide.toString()); }else { jsonGenerator.writeNull(); } } }