当前位置: 首页 > 教程 > Jackson >

Jackson-简单数据绑定

精华
小牛编辑
136浏览
2023-03-14

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

  • 简单数据绑定:在List,String,数值类型,布尔值和NULL对象之间来回转换JSON。
  • 完全数据绑定:将JSON与任何Java类型相互转换。

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

1 简单数据绑定的映射关系

简单数据绑定是指将JSON映射到Java核心数据类型。下表展示了JSON类型与Java类型之间的关系。

JSON类型 Java类型
object LinkedHashMap<String,Object>
array ArrayList<Object>
string String
整数 Integer, Long or BigInteger
小数 Double / BigDecimal
true | false Boolean
null null

2 简单数据绑定的示例

2.1 编写核心类

MainApp:

package cn.xnip.jackson;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * 小牛知识库网 - https://www.xnip.cn
 */
public class MainApp {

    public static void main(String args[]){
        MainApp tester = new MainApp();
        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("eric");

            // Java对象类型
            studentDataMap.put("student", student);

            // String类型
            studentDataMap.put("name", "eric");

            // JBoolean类型
            studentDataMap.put("verified", Boolean.FALSE);

            // 数组类型
            studentDataMap.put("marks", marks);

            mapper.writeValue(new File("student.json"), studentDataMap);

            //写出到student.json文件
            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+ " ]";
    }
}

2.2 运行测试

项目根目录生成student.json文件,内容如下:

{"student":{"name":"eric","age":10},"name":"eric","verified":false,"marks":[1,2,3]}