解析Java的Jackson庫(kù)中對(duì)象的序列化與數(shù)據(jù)泛型綁定
Jackson對(duì)象序列化
這里將介紹將Java對(duì)象序列化到一個(gè)JSON文件,然后再讀取JSON文件獲取轉(zhuǎn)換為對(duì)象。在這個(gè)例子中,創(chuàng)建了Student類。創(chuàng)建將有學(xué)生對(duì)象以JSON表示在一個(gè)student.json文件。
創(chuàng)建一個(gè)名為JacksonTester在Java類文件在 C:\>Jackson_WORKSPACE.
文件: JacksonTester.java
import java.io.File;
import java.io.IOException;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
JacksonTester tester = new JacksonTester();
try {
Student student = new Student();
student.setAge(10);
student.setName("Mahesh");
tester.writeJSON(student);
Student student1 = tester.readJSON();
System.out.println(student1);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void writeJSON(Student student) throws JsonGenerationException, JsonMappingException, IOException{
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("student.json"), student);
}
private Student readJSON() throws JsonParseException, JsonMappingException, IOException{
ObjectMapper mapper = new ObjectMapper();
Student student = mapper.readValue(new File("student.json"), Student.class);
return student;
}
}
class Student {
private String name;
private int age;
public Student(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
驗(yàn)證結(jié)果
使用 javac 編譯如下類:
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運(yùn)行jacksonTester看到的結(jié)果:
C:\Jackson_WORKSPACE>java JacksonTester
驗(yàn)證輸出結(jié)果
Student [ name: Mahesh, age: 10 ]
Jackson數(shù)據(jù)綁定泛型
在簡(jiǎn)單的數(shù)據(jù)綁定中,我們使用String作為關(guān)鍵對(duì)象,并作為一個(gè)值對(duì)象映射類。相反,我們可以使用具體的Java對(duì)象和類型強(qiáng)制轉(zhuǎn)換到JSON使用。
考慮下面的例子使用一個(gè)類的UserData來(lái)保存用戶專用數(shù)據(jù)。
創(chuàng)建一個(gè)名為JacksonTester在Java類文件目錄 C:\>Jackson_WORKSPACE.
文件名: JacksonTester.java
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
public class JacksonTester {
public static void main(String args[]){
JacksonTester tester = new JacksonTester();
try {
ObjectMapper mapper = new ObjectMapper();
Map userDataMap = new HashMap();
UserData studentData = new UserData();
int[] marks = {1,2,3};
Student student = new Student();
student.setAge(10);
student.setName("Mahesh");
// JAVA Object
studentData.setStudent(student);
// JAVA String
studentData.setName("Mahesh Kumar");
// JAVA Boolean
studentData.setVerified(Boolean.FALSE);
// Array
studentData.setMarks(marks);
TypeReference ref = new TypeReference>() { };
userDataMap.put("studentData1", studentData);
mapper.writeValue(new File("student.json"), userDataMap);
//{
// "studentData1":
// {
// "student":
// {
// "name":"Mahesh",
// "age":10
// },
// "name":"Mahesh Kumar",
// "verified":false,
// "marks":[1,2,3]
// }
//}
userDataMap = mapper.readValue(new File("student.json"), ref);
System.out.println(userDataMap.get("studentData1").getStudent());
System.out.println(userDataMap.get("studentData1").getName());
System.out.println(userDataMap.get("studentData1").getVerified());
System.out.println(Arrays.toString(userDataMap.get("studentData1").getMarks()));
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int age;
public Student(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
class UserData {
private Student student;
private String name;
private Boolean verified;
private int[] marks;
public UserData(){}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getVerified() {
return verified;
}
public void setVerified(Boolean verified) {
this.verified = verified;
}
public int[] getMarks() {
return marks;
}
public void setMarks(int[] marks) {
this.marks = marks;
}
}
驗(yàn)證輸出
使用javac編譯如下類:
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運(yùn)行jacksonTester看到的結(jié)果:
C:\Jackson_WORKSPACE>java JacksonTester
驗(yàn)證輸出
Student [ name: Mahesh, age: 10 ] Mahesh Kumar false [1, 2, 3]
- java如何利用FastJSON、Gson、Jackson三種Json格式工具自定義時(shí)間序列化
- Java下利用Jackson進(jìn)行JSON解析和序列化示例
- java的Jackson將json字符串轉(zhuǎn)換成泛型List
- java的Jackson框架實(shí)現(xiàn)輕易轉(zhuǎn)換JSON
- Java的Jackson庫(kù)中復(fù)雜對(duì)象集合的幾種簡(jiǎn)單轉(zhuǎn)換
- 舉例講解Java的Jackson庫(kù)中ObjectMapper類的使用
- 實(shí)例解析Java的Jackson庫(kù)中的數(shù)據(jù)綁定
- Java的Jackson庫(kù)的使用及其樹(shù)模型的入門(mén)學(xué)習(xí)教程
- 使用Jackson來(lái)實(shí)現(xiàn)Java對(duì)象與JSON的相互轉(zhuǎn)換的教程
- 詳解Jackson的基本用法
相關(guān)文章
SpringBoot日志配置SLF4J和Logback的方法實(shí)現(xiàn)
日志記錄是不可或缺的一部分,本文主要介紹了SpringBoot日志配置SLF4J和Logback的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
SpringBoot任務(wù)調(diào)度器的實(shí)現(xiàn)代碼
SpringBoot自帶了任務(wù)調(diào)度器,通過(guò)注解的方式使用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
Spring Cloud Hystrix 線程池隊(duì)列配置(踩坑)
這篇文章主要介紹了Spring Cloud Hystrix 線程池隊(duì)列配置(踩坑),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Jackson2的JsonSchema實(shí)現(xiàn)java實(shí)體類生成json方式
這篇文章主要介紹了Jackson2的JsonSchema實(shí)現(xiàn)java實(shí)體類生成json,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
java 反射調(diào)用Service導(dǎo)致Spring注入Dao失效的解決方案
這篇文章主要介紹了java 反射調(diào)用Service導(dǎo)致Spring注入Dao失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
SpringBoot中攔截器和動(dòng)態(tài)代理的區(qū)別詳解
在?Spring?Boot?中,攔截器和動(dòng)態(tài)代理都是用來(lái)實(shí)現(xiàn)功能增強(qiáng)的,所以在很多時(shí)候,有人會(huì)認(rèn)為攔截器的底層是通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn)的,所以本文就來(lái)盤(pán)點(diǎn)一下他們兩的區(qū)別,以及攔截器的底層實(shí)現(xiàn)吧2023-09-09
關(guān)于HashSet與HashMap的區(qū)別及說(shuō)明
這篇文章主要介紹了關(guān)于HashSet與HashMap的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07

