Jackson - 数据绑定
数据绑定 API 用于使用属性访问器或注释将 JSON 转换为 POJO(普通旧 Java 对象)或从 POJO 转换回来。它分为两种类型。
简单数据绑定 - 将 JSON 转换为 Java Map、列表、字符串、数字、布尔值和 null 对象或从其转换回来。
完整数据绑定 - 将 JSON 转换为任何 JAVA 类型或从其转换回来。
ObjectMapper 对两种类型的数据绑定进行 JSON 的读/写。数据绑定是最便捷的方式,类似用于 XML 的 JAXB 解析器。
简单数据绑定
简单数据绑定是指 JSON 到 JAVA 核心数据类型的映射。下表说明了 JSON 类型与 Java 类型之间的关系。
序号 | JSON 类型 | Java 类型 |
---|---|---|
1 | 对象 | LinkedHashMap<String,Object> |
2 | 数组 | ArrayList<Object> |
3 | 字符串 | String |
4 | 整数 | Integer、Long 或 BigInteger |
5 | 小数 | 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]
广告