แจ็คสัน - การผูกข้อมูล
Data Binding API ใช้เพื่อแปลง JSON เป็นและจาก POJO (Plain Old Java Object) โดยใช้ตัวเข้าถึงคุณสมบัติหรือใช้คำอธิบายประกอบ เป็นสองประเภท
Simple Data Binding - แปลง JSON ไปและกลับจาก Java Maps, Lists, Strings, Numbers, Booleans และ null objects
Full Data Binding - แปลง JSON เป็นและจากประเภท JAVA ใด ๆ
ObjectMapper อ่าน / เขียน JSON สำหรับการเชื่อมโยงข้อมูลทั้งสองประเภท การผูกข้อมูลเป็นวิธีที่สะดวกที่สุดและคล้ายคลึงกับ JAXB parer สำหรับ XML
การผูกข้อมูลอย่างง่าย
การผูกข้อมูลอย่างง่ายหมายถึงการแมปประเภทข้อมูล JSON กับ JAVA Core ตารางต่อไปนี้แสดงความสัมพันธ์ระหว่างประเภท JSON กับประเภท Java
เลขที่ | ประเภท JSON | ประเภท Java |
---|---|---|
1 | วัตถุ | LinkedHashMap <String, Object> |
2 | อาร์เรย์ | ArrayList <Object> |
3 | สตริง | สตริง |
4 | หมายเลขที่สมบูรณ์ | Integer, Long หรือ BigInteger |
5 | เลขเศษส่วน | Double / BigDecimal |
6 | จริง | เท็จ | บูลีน |
7 | โมฆะ | โมฆะ |
มาดูการทำงานของการเชื่อมโยงข้อมูลอย่างง่าย ที่นี่เราจะจับคู่ประเภทพื้นฐานของ JAVA กับ JSON โดยตรงและในทางกลับกัน
สร้างไฟล์คลาส java ชื่อ JacksonTester ใน C:\>Jackson_WORKSPACE.
ไฟล์: 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+ " ]";
}
}
Verify the result
รวบรวมคลาสโดยใช้ javac คอมไพเลอร์ดังนี้:
C:\Jackson_WORKSPACE>javac JacksonTester.java
ตอนนี้เรียกใช้ jacksonTester เพื่อดูผลลัพธ์:
C:\Jackson_WORKSPACE>java JacksonTester
ตรวจสอบผลลัพธ์
{name=Mahesh, age=10}
Mahesh Kumar
false
[1, 2, 3]
การผูกข้อมูลแบบเต็ม
การผูกข้อมูลกับ Generics