位置:首頁 > Java技術 > Jackson教學 > Jackson數據綁定

Jackson數據綁定

數據綁定API用於JSON轉換和使用屬性訪問或使用注解POJO(普通Java對象)。以下是它的兩個類型。

  • 簡單數據綁定 - 轉換JSON,從Java Maps, Lists, Strings, Numbers, Booleans 和 null 對象。

  • 完整數據綁定 - 轉換JSON到任何JAVA類型。我們將在下一章分彆綁定。

ObjectMapper讀/寫JSON兩種類型的數據綁定。數據綁定是最方便的方式是類似XML的JAXB解析器。

簡單的數據綁定

簡單的數據綁定是指JSON映射到Java核心數據類型。下表列出了JSON類型和Java類型之間的關係。

Sr. No. JSON 類型 Java 類型
1 object LinkedHashMap<String,Object>
2 array ArrayList<Object>
3 string String
4 complete number Integer, Long or BigInteger
5 fractional number Double / BigDecimal
6 true | false Boolean
7 null null

讓我們來看看簡單的數據操作綁定。在這裡,我們將映射JAVA基本類型直接JSON,反之亦然。

創建一個名為JacksonTester在Java類文件在目錄 C:\>Jackson_WORKSPACE.

File: JacksonTester.java

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
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;

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]