📜  Jackson-数据绑定

📅  最后修改于: 2020-11-16 07:32:16             🧑  作者: Mango


数据绑定API用于使用属性访问器或使用注释将JSON与POJO(普通Java对象)进行转换。它有两种类型。

  • 简单数据绑定-在Java地图,列表,字符串,数字,布尔值和null对象之间来回转换JSON。

  • 完全数据绑定-将JSON与任何JAVA类型相互转换。

ObjectMapper读取/写入两种类型的数据绑定的JSON。数据绑定是最方便的方式,类似于XML的JAXB解析器。

简单数据绑定

简单数据绑定是指将JSON映射到JAVA Core数据类型。下表说明了JSON类型与Java类型之间的关系。

Sr. No. JSON Type Java Type
1 object LinkedHashMap
2 array ArrayList
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 studentDataMap = new HashMap(); 
            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]

完整数据绑定

泛型数据绑定