开发手册 欢迎您!
软件开发者资料库

Jackson - 数据绑定

Jackson 初学者教程 - 从概述,环境设置,第一个应用程序,ObjectMapper,对象序列化,数据绑定,树模型,流API API开始,简单易学地学习杰克逊库

Data Binding API用于使用属性访问器或使用注释将JSON转换为POJO(Plain Old Java Object)和从POJO转换.它有两种类型.

  • 简单数据绑定  - 将JSON转换为Java地图,列表,字符串,数字,布尔值和null对象.

  • 完整数据绑定  - 将JSON转换为任何JAVA类型.

ObjectMapper为两种类型的数据绑定读取/写入JSON.数据绑定是最方便的方式,类似于XML的JAXB parer.

简单数据绑定

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

Sr.否.JSON类型Java类型
1objectLinkedHashMap< String,Object>
2arrayArrayList< Object>
3stringString
4complete number整数,长整数或大整数
5fractional numberDouble/BigDecimal
6true | false布尔值
7nullnull

让我们看看简单的数据绑定.这里我们将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 Kumarfalse[1, 2, 3]

完整数据绑定

数据绑定泛型