如何使用 Java 中的 Jackson 对象模型映射 JSON 数据?

javajsonobject oriented programmingprogramming

ObjectMapper  类提供在 Java 对象和匹配的 JSON 构造之间进行转换的功能。我们可以使用 树状 数据结构将由 对象模型 表示的 JSON 数据映射到特定的 Java 对象,该数据结构读取并将整个 JSON 内容存储在内存中。第一步,将 JSON 数据读入 JsonNode  对象 ,然后通过调用 ObjectMapper  类的 treeToValue() 方法将其映射到另一个实例。

语法

public <T> T treeToValue(TreeNode n, Class<T> valueType) throws JsonProcessingException

示例

import java.io.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
public class JsonTreeModelDemo {
   public static void main(String[] args) throws JsonProcessingException, IOException {
      String jsonString = "{\"id\":\"102\", \"name\":\"Raja Ramesh\", \"address\":[{\"area\":\"Madhapur\", \"city\":\"Hyderabad\"}]}";
      ObjectMapper objectMapper = new ObjectMapper();
      JsonNode jsonNode = objectMapper.readTree(jsonString);
      User user = objectMapper.treeToValue(jsonNode, User.class);
      System.out.println(user);
   }
}
// User class
class User {
   private int id;
   private String name;
   private Address[] address;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public Address[] getAddress() {
      return address;
   }
   public void setAddress(Address[] address) {
      this.address = address;
   }
   @Override   public String toString() {
      StringBuilder sb = new StringBuilder();
      sb.append("{");
      sb.append(id).append(",");
      sb.append(name).append(",");
      for(Address address1 : address) {
         sb.append(address1).append(",");
      }
      sb.append("}");
      return sb.toString();
   }
}
// Address class
class Address {
   private String area;
   private String city;
   public String getArea() {
      return area;
   }
   public void setArea(String area) {
      this.area = area;
   }
   public String getCity() {
      return city;
   }
   public void setCity(String city) {
      this.city = city;
   }
   @Override   public String toString() {
      StringBuilder sb = new StringBuilder();
      sb.append("{");
      sb.append(area).append(",");
      sb.append(city);
      sb.append("}");
      return sb.toString();
   }
}

输出

{102,Raja Ramesh,{Madhapur,Hyderabad},}

相关文章