Jackson - 数据绑定


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

  • 简单数据绑定- 将 JSON 与 Java 映射、列表、字符串、数字、布尔值和空对象相互转换。

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

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

简单的数据绑定

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

先生。没有。JSON 类型Java类型
1目的LinkedHashMap<字符串,对象>
2大批数组列表<对象>
3细绳细绳
4完整号码整数、长整型或大整数
5分数双精度/大十进制
6真实 | 错误的布尔值
7无效的无效的

让我们看看简单的数据绑定的实际应用。在这里,我们将 JAVA 基本类型直接映射到 JSON,反之亦然。

在C:\>Jackson_WORKSPACE中创建一个名为 JacksonTester 的 java 类文件。

文件:JacksonTester.java

导入java.io.File;
导入java.io.IOException;
导入java.util.HashMap;
导入java.util.Map;

导入 com.fasterxml.jackson.core.JsonParseException;
导入 com.fasterxml.jackson.databind.JsonMappingException;
导入 com.fasterxml.jackson.databind.ObjectMapper;

公共类 JacksonTester {
   公共静态无效主(字符串参数[]){
      JacksonTester 测试器 = new JacksonTester();
         尝试 {
            ObjectMapper 映射器 = new ObjectMapper();

            Map<String,Object> StudentDataMap = new HashMap<String,Object>();
            int[] 标记 = {1,2,3};

            学生学生=新学生();
            学生.setAge(10);
            学生.setName("Mahesh");
            // JAVA 对象
            StudentDataMap.put("学生", 学生);
            // JAVA 字符串
            StudentDataMap.put("姓名", "Mahesh Kumar");   		
            // JAVA 布尔值
            StudentDataMap.put("已验证", Boolean.FALSE);
            // 大批
            StudentDataMap.put("分数", 分数);

            mapper.writeValue(new File("student.json"), StudentDataMap);
            //结果student.json
			//{
            // "学生":{"姓名":"马赫什","年龄":10},
            // "标记":[1,2,3],
            //“已验证”:假,
            //“名称”:“马赫什·库马尔”
            //}
            StudentDataMap = mapper.readValue(new File("student.json"), Map.class);

            System.out.println(studentDataMap.get("学生"));
            System.out.println(studentDataMap.get("姓名"));
            System.out.println(studentDataMap.get("已验证"));
            System.out.println(studentDataMap.get("分数"));
      } catch (JsonParseException e) {
         e.printStackTrace();
      } catch (JsonMappingException e) {
         e.printStackTrace();
      } catch (IOException e) {
            e.printStackTrace();
      }
   }
}

班级学生{
   私有字符串名称;
   私有整数年龄;
   公共学生(){}
   公共字符串 getName() {
      返回名称;
   }
   公共无效setName(字符串名称){
      this.name = 名称;
   }
   公共 int getAge() {
      返回年龄;
   }
   公共无效setAge(int年龄){
      this.age = 年龄;
   }
   公共字符串 toString(){
      return "学生[姓名:"+姓名+",年龄:"+年龄+"]";
   }	
}

验证结果

使用javac编译器编译类,如下所示:

C:\Jackson_WORKSPACE>javac JacksonTester.java

现在运行 jacksonTester 查看结果:

C:\Jackson_WORKSPACE>java JacksonTester

验证输出

{name=Mahesh, age=10}
Mahesh Kumar
false
[1, 2, 3]

完整的数据绑定

与泛型的数据绑定