Jackson数据绑定 - Jackson教程
数据绑定API用于JSON转换和使用属性访问或使用注解POJO(普通Java对象)。以下是它的两个类型。
简单数据绑定 - 转换JSON,从Java Maps, Lists, Strings, Numbers, Booleans 和 null 对象。
完整数据绑定 - 转换JSON到任何JAVA类型。我们将在下一章分别绑定。
ObjectMapper读/写JSON两种类型的数据绑定。数据绑定是最方便的方式是类似XML的JAXB解析器。
简单的数据绑定
简单的数据绑定是指JSON映射到Java核心数据类型。下表列出了JSON类型和Java类型之间的关系。
| Sr. No. | JSON 类型 | Java 类型 | 
|---|---|---|
| 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 | null | 
让我们来看看简单的数据操作绑定。在这里,我们将映射JAVA基本类型直接JSON,反之亦然。
创建一个名为JacksonTester在Java类文件在目录 C:\>Jackson_WORKSPACE.
File: JacksonTester.java
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.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]