Jackson - 数据绑定

  • 简述

    数据绑定 API 用于使用属性访问器或使用注释将 JSON 与 POJO(纯旧 Java 对象)相互转换。它有两种类型。
    • 简单数据绑定 - 将 JSON 与 Java 映射、列表、字符串、数字、布尔值和空对象相互转换。
    • 完整数据绑定 - 将 JSON 与任何 JAVA 类型相互转换。
    对象映射器为这两种类型的数据绑定读取/写入 JSON。数据绑定是最方便的方式,类似于 XML 的 JAXB 解析器。
  • 简单数据绑定

    简单数据绑定是指将 JSON 映射到 JAVA 核心数据类型。下表说明了 JSON 类型与 Java 类型之间的关系。
    先生 No. JSON 类型 爪哇类型
    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,反之亦然。
    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]