Jackson 简明教程
Jackson - Data Binding
数据绑定 API 用于使用属性访问器或者批注将 JSON 转换为 POJO (Plain Old Java Object) 或者从 POJO 转换为 JSON。 它分为两种类型。
-
Simple Data Binding - 将 JSON 转换为 Java Maps、Lists、Strings、Numbers、Booleans 和空对象,反之亦然。
-
Full Data Binding - 将 JSON 转换为任何 JAVA 类型,反之亦然。
ObjectMapper 为这两种数据绑定读取/写入 JSON。数据绑定是最方便的方法,并且类似于 XML 的 JAXB 解析器。
Simple Data Binding
简单数据绑定指向对 JAVA Core 数据类型的 JSON 映射。下表描述了 JSON 类型和 Java 类型之间的关系。
Sr. No. |
JSON Type |
Java Type |
1 |
object |
LinkedHashMap<String,Object> |
2 |
array |
ArrayList<Object> |
3 |
string |
String |
4 |
complete number |
Integer, Long or BigInteger |
5 |
fractional number |
Double / BigDecimal |
6 |
true |
false |
Boolean |
7 |
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+ " ]";
}
}
Verify the result
使用 javac 编译器编译类,如下所示:
C:\Jackson_WORKSPACE>javac JacksonTester.java
现在运行 jacksonTester 查看结果:
C:\Jackson_WORKSPACE>java JacksonTester
验证输出
{name=Mahesh, age=10}
Mahesh Kumar
false
[1, 2, 3]