Jackson - 資料繫結
資料繫結 API 用於使用屬性訪問器或註釋將 JSON 轉換為 POJO(普通舊 Java 物件)或從 POJO 轉換回來。它分為兩種型別。
簡單資料繫結 - 將 JSON 轉換為 Java Map、列表、字串、數字、布林值和 null 物件或從其轉換回來。
完整資料繫結 - 將 JSON 轉換為任何 JAVA 型別或從其轉換回來。
ObjectMapper 對兩種型別的資料繫結進行 JSON 的讀/寫。資料繫結是最便捷的方式,類似用於 XML 的 JAXB 解析器。
簡單資料繫結
簡單資料繫結是指 JSON 到 JAVA 核心資料型別的對映。下表說明了 JSON 型別與 Java 型別之間的關係。
| 序號 | JSON 型別 | Java 型別 |
|---|---|---|
| 1 | 物件 | LinkedHashMap<String,Object> |
| 2 | 陣列 | ArrayList<Object> |
| 3 | 字串 | String |
| 4 | 整數 | Integer、Long 或 BigInteger |
| 5 | 小數 | Double / BigDecimal |
| 6 | true | false | Boolean |
| 7 | null | null |
讓我們看看簡單資料繫結的實際應用。此處,我們將直接將 JAVA 基本型別對映到 JSON,反之亦然。
在 C:\>Jackson_WORKSPACE 中建立一個名為 JacksonTester 的 java 類檔案。
檔案:JacksonTester.java
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
JacksonTester tester = new JacksonTester();
try {
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> studentDataMap = new HashMap<String,Object>();
int[] marks = {1,2,3};
Student student = new Student();
student.setAge(10);
student.setName("Mahesh");
// JAVA Object
studentDataMap.put("student", student);
// JAVA String
studentDataMap.put("name", "Mahesh Kumar");
// JAVA Boolean
studentDataMap.put("verified", Boolean.FALSE);
// Array
studentDataMap.put("marks", marks);
mapper.writeValue(new File("student.json"), studentDataMap);
//result student.json
//{
// "student":{"name":"Mahesh","age":10},
// "marks":[1,2,3],
// "verified":false,
// "name":"Mahesh Kumar"
//}
studentDataMap = mapper.readValue(new File("student.json"), Map.class);
System.out.println(studentDataMap.get("student"));
System.out.println(studentDataMap.get("name"));
System.out.println(studentDataMap.get("verified"));
System.out.println(studentDataMap.get("marks"));
} 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+ " ]";
}
}
驗證結果
使用 javac 編譯器編譯類,如下所示
C:\Jackson_WORKSPACE>javac JacksonTester.java
現在執行 jacksonTester 檢視結果
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
{name=Mahesh, age=10}
Mahesh Kumar
false
[1, 2, 3]
廣告