Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Map JSON data với Jackson Object Model (Tree Model) trong Java

Jackson Tree Model (JsonNode) đọc toàn bộ JSON vào memory tree, sau đó map sang POJO qua ObjectMapper.treeToValue().

Cú pháp

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

Ví dụ: JSON → JsonNode → POJO

import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.node.*;

public class JsonTreeModelDemo {
    public static void main(String[] args) throws Exception {
        String jsonString = "{\"id\":\"102\",\"name\":\"Raja Ramesh\",\"address\":[{\"area\":\"Madhapur\",\"city\":\"Hyderabad\"}]}";
        
        ObjectMapper mapper = new ObjectMapper();
        
        // 1. Parse JSON → JsonNode (Tree Model)
        JsonNode jsonNode = mapper.readTree(jsonString);
        
        // 2. Map JsonNode → POJO
        User user = mapper.treeToValue(jsonNode, User.class);
        
        System.out.println(user);
    }
}

class User {
    private int id;
    private String name;
    private Address[] address;
    // getters/setters...
    @Override public String toString() {
        StringBuilder sb = new StringBuilder("{").append(id).append(",").append(name).append(",");
        for (Address a : address) sb.append(a).append(",");
        return sb.append("}").toString();
    }
}

class Address {
    private String area, city;
    // getters/setters...
    @Override public String toString() { return "{" + area + "," + city + "}"; }
}

Output

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

Tree Model Operations hữu ích

  • Traverse: node.get("field"), node.path("field") (an toàn null), node.at("/path/to/node") (JSON Pointer).
  • Modify: ((ObjectNode)node).put("newField", "value"), .remove("field").
  • Convert: mapper.treeToValue(node, Class), mapper.convertValue(node, Class).
  • Merge: node.deepCopy(), ((ObjectNode)node).setAll(otherNode).

So sánh 3 Model Jackson

Model Class chính Memory Use case
Data Binding (POJO) ObjectMapper.readValue() Low (streaming) Thông thường, performance tốt
Tree Model JsonNode, ObjectNode High (full tree) Dynamic JSON, unknown structure, transform
Streaming JsonParser, JsonGenerator Lowest Large JSON, memory constrained, custom parsing

Khi nào dùng Tree Model?

  • JSON structure không cố định (schema-less, dynamic fields).
  • Cần modify JSON trước khi map sang POJO.
  • Extract subset của JSON lớn.
  • Merge multiple JSON sources.