Jackson 简明教程

Jackson - Data Binding

数据绑定 API 用于使用属性访问器或者批注将 JSON 转换为 POJO (Plain Old Java Object) 或者从 POJO 转换为 JSON。 它分为两种类型。

Data Binding API is used to convert JSON to and from POJO (Plain Old Java Object) using property accessor or using annotations. It is of two type.

  1. Simple Data Binding - Converts JSON to and from Java Maps, Lists, Strings, Numbers, Booleans and null objects.

  2. Full Data Binding - Converts JSON to and from any JAVA type.

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

ObjectMapper reads/writes JSON for both types of data bindings. Data Binding is most convenient way and is analogus to JAXB parer for XML.

Simple Data Binding

简单数据绑定指向对 JAVA Core 数据类型的 JSON 映射。下表描述了 JSON 类型和 Java 类型之间的关系。

Simple data binding refers to mapping of JSON to JAVA Core data types. Following table illustrates the relationship between JSON types vs Java Types.

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 中,反之亦然。

Let’s see simple data binding in action. Here we’ll map JAVA basic types directly to JSON and vice versa.

C:&gt;Jackson_WORKSPACE 中创建一个名为 JacksonTester 的 java 类文件。

Create a java class file named JacksonTester in C:\>Jackson_WORKSPACE.

文件:JacksonTester.java

File: 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

Verify the result

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

Compile the classes using javac compiler as follows:

C:\Jackson_WORKSPACE>javac JacksonTester.java

现在运行 jacksonTester 查看结果:

Now run the jacksonTester to see the result:

C:\Jackson_WORKSPACE>java JacksonTester

验证输出

Verify the Output

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