jackson用于java对象到json的序列化与反序列化。还支持xml格式。
jackson用于实现json与java对象的序列与反序列化。web service要实现跨机器传送对象那么就需要有一种技术能把对象转换为特定格式的信息。为了实现跨平台(比如把java对象转化为c#或c++对象),又考虑到方便人们阅读,所以基于字符串规则的转换是最理想的。json就是这样一个轻量级的数据交换格式,而jackson是一个实现该功能的很好用的框架。
1.获得
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId> jackson-databind</artifactId> <version>2.6.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.6.4</version> </dependency>
2.常用注解
@com.fasterxml.jackson.annotation.JsonPropertyOrder
指定序列化为json串时的各字段顺序
@com.fasterxml.jackson.annotation.JsonIgnoreProperties
指定序列化为json串时排除的一些字段
例子:
@JsonAutoDetect @JsonPropertyOrder(value = {"price", "name"}) @JsonIgnoreProperties(value = {"year"}) public class Book { public String name = "Physics"; public String price = "123"; public String year = "2015"; @GET @Produces(MediaType.APPLICATION_JSON) public Book wsBook(){ return new Book(); } }
@com.fasterxml.jackson.annotation. JsonProperty
字段在序列化时只用指定的别名
3. 常用函数
com.fasterxml.jackson.databind.
ObjectMapper
核心类。
com.fasterxml.jackson.databind.ObjectMapper.
ObjectMapper()
ObjectMapper的构造函数,得到的对象是线程安全的,建议在程序中作为静态成员直接用。
3.1 对象与json
<T> T com.fasterxml.jackson.databind.ObjectMapper.
readValue(File src, Class<T> valueType)
从文件中直接反序列化,当然,文件中是json格式的字符串。
<T> T com.fasterxml.jackson.databind.ObjectMapper.
readValue(String content,
Class<T> valueType)
从字符串中反序列化。
public void
writeValue(File resultFile, Object value)
将对象序列化到文件中去。文件是json格式的文本文件。
String com.fasterxml.jackson.databind.ObjectMapper.
writeValueAsString(Object value)
将对象序列化成json格式的string。
3.2 泛型
<T> T com.fasterxml.jackson.databind.ObjectMapper.
readValue(URL src,
TypeReference valueTypeRef)
反序列化时指定泛型参数。这个函数很有用,如:
public static ConcurrentHashMap<String,Integer> readMapFromFile(File file) throws JsonParseException, JsonMappingException, IOException{ //new an anonymous class return objectMapper.readValue(file, new TypeReference<ConcurrentHashMap<String,Integer>>() {}); }
3.3 缩进
ObjectMapper objectMapper=new ObjectMapper().
enable(SerializationFeature.
INDENT_OUTPUT);
此时序列化后的json带缩进,方便肉眼看。
3.4 jsonNode
com.fasterxml.jackson.databind.
JsonNode
json同xml类似,背后的数据结构都是树。当我们不需要反序列化,直接遍历某些节点时,就可以用JsonNode。
JsonNode com.fasterxml.jackson.databind.ObjectMapper.readTree(String content)
读取json,得到root节点。
JsonNode com.fasterxml.jackson.databind.JsonNode.
get(String fieldName)
获取指定的孩子node。若不存在返回null。
String com.fasterxml.jackson.databind.JsonNode.
asText()
将当前节点的内容以string格式输出。
String com.fasterxml.jackson.databind.JsonNode.
asText(String defaultValue)
当指定的节点不存在时返回形参中的默认值。
4.示例
5.xml
在以上依赖的基础上添加:<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.6.4</version> </dependency>
5.1 常用类与函数
com.fasterxml.jackson.dataformat.xml.
XmlMapper
它是ObjectMapper类的子类,用于处理xml。
它是ObjectMapper类的子类,用于处理xml。
注意mapper.enable(SerializationFeature.INDENT_OUTPUT);是不支持的。
6.指定反序列化时的实现类
如果是List接口,默认实现类是ArrayList。如果写明了LinkedList等,那么反序列化后就是LinkedList。