Jackson 介紹
Jackson框架是基于Java平臺(tái)的一套數(shù)據(jù)處理工具,被稱為“最好的Java Json解析器”站宗。
Jackson框架包含了3個(gè)核心庫(kù):streaming,databind,annotations.Jackson還包含了其它數(shù)據(jù)處理類庫(kù)请契,此外不作說明舀武。
Jackson版本: 1.x (目前版本從1.1~1.9)與2.x邻辉。1.x與2.x從包的命名上可以看出來轿衔,1.x的類庫(kù)中微驶,包命名以:org.codehaus.jackson.xxx開頭浪谴,而2.x類庫(kù)中包命令:com.fastxml.jackson.xxx開頭
- Jackson Home Page:https://github.com/FasterXML/jackson
- Jackson Wiki:http://wiki.fasterxml.com/JacksonHome
- Jackson doc: https://github.com/FasterXML/jackson-docs
- Jackson Download Page:http://wiki.fasterxml.com/JacksonDownload
jackson核心類說明
- JsonGenerator:定義了寫JSON內(nèi)容的公共api基類,實(shí)例使用工廠方法創(chuàng)建因苹;
- JsonFactory:jackson包最主要的工廠類苟耻,主要被用于配置和構(gòu)建reader(JsonParser)和writer(JsonGenerator);
- ObjectMapper:ObjectMapper提供讀寫JSON扶檐、POJOs對(duì)象序列化成JSON和反序列化凶杖、JSON樹模型;ObjectMapper是json序列化與反序列化的核心款筑,可以在ObjectMapper配置許多屬性官卡。
- ConfigFeature——配置類接口
- MapperFeature——Enumeration that defines simple on/off features to set for {@link ObjectMapper}
- DeserializationFeature——Enumeration that defines simple on/off features that affect the way Java objects are deserialized from JSON
- SerializationFeature——Enumeration that defines simple on/off features that affect the way Java objects are serialized
maven引入jackson包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.5</version>
</dependency>
POJOs序列化為JSON以及JSON反序列化成POJOs
POJOs (Plain Old Java Objects)
public static class MyClass {
private String name;
private String passwd;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "MyClass{" +
"name='" + name + '\'' +
", passwd='" + passwd + '\'' +
", address='" + address + '\'' +
'}';
}
}
jackson序列化以及反序列化
@Test
public void test() throws IOException {
ObjectMapper mapper = new ObjectMapper();
MyClass myClass = new MyClass();
myClass.setName("daidai");
myClass.setPasswd("123456");
myClass.setAddress("beijing");
File newFile = new File("my-class.json");
System.out.println(mapper.canSerialize(Timestamp.class));
System.out.println(mapper.canDeserialize(JsonUtil.constructParametricType(List.class, MyClass.class)));
// json序列化
// 序列化到文件
mapper.writeValue(newFile, myClass);
// 序列化成字符串
String json = mapper.writeValueAsString(myClass);
System.out.println(json);
// json反序列化
// 從文件反序列化
MyClass older = mapper.readValue(new File("my-class.json"), MyClass.class);
System.out.println(older);
// 從json串反序列化
MyClass older2 = mapper.readValue(json, MyClass.class);
System.out.println(older2);
// json Tree解析
JsonNode root = mapper.readTree(newFile);
System.out.println(root.at("/passwd"));
System.out.println(root.at("/name"));
System.out.println(root.at("/address"));
}
參考資料:http://blog.csdn.net/java_huashan/article/details/46375857