Java에서 ObjectMapper 클래스는 Java 객체와 JSON 구조 간의 상호 변환을 수행하는 핵심 기능을 제공합니다. 객체 모델(Object Model)로 표현된 JSON 데이터를 특정 Java 객체에 매핑하려면, 전체 JSON 콘텐츠를 메모리에 읽어 들여 저장하는 트리(tree) 형태의 데이터 구조를 활용할 수 있습니다.
매핑 과정은 크게 두 단계로 진행됩니다. 먼저 JSON 데이터를 JsonNode 객체로 읽어 들인 후, ObjectMapper 클래스의 treeToValue() 메서드를 호출하여 다른 인스턴스(Java 객체)로 변환하는 방식입니다.
문법(Syntax)
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 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 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}}위 예제에서 볼 수 있듯이, readTree() 메서드가 JSON 문자열을 JsonNode 트리 구조로 파싱하고, 이어서 treeToValue() 메서드가 해당 트리를 User 타입의 객체로 변환합니다. 이 방식은 JSON 구조를 사전에 유연하게 검토하거나 조작해야 하는 경우 특히 유용합니다.