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.