Jackson의 Tree Model API는 JSON 데이터를 JsonNode 객체 형태로 다루며, JSON의 개별 필드를 쉽게 추가, 제거, 변경할 수 있습니다. Tree Model을 활용하면 동적 JSON 데이터를 유연하게 다룰 수 있고, 특히 구조가 복잡하거나 구조가 고정되지 않은 JSON 데이터를 다룰 때 매우 유용합니다.
Tree Model API와 JsonNode 이해하기
Jackson의 Tree Model API는 JSON 데이터 구조를 나무 형태로 관리하여 JSON의 개별 요소에 쉽게 접근하고 수정할 수 있습니다. 이때 JsonNode는 JSON 데이터의 각 노드를 나타내는 객체로, JSON의 객체(ObjectNode)와 배열(ArrayNode) 형태로 데이터 구조를 표현할 수 있습니다.
JsonNode의 기본 사용 예제
아래 예제는 JsonNode 객체로 JSON 데이터를 처리하는 기본적인 코드입니다. 예제에서는 JSON 데이터 구조를 String으로 입력받아 ObjectMapper를 통해 JsonNode 객체로 변환합니다.
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) throws Exception {
String jsonData = "{\"name\":\"홍길동\", \"age\":30, \"city\":\"서울\"}";
ObjectMapper mapper = new ObjectMapper();
// JSON 데이터를 JsonNode로 변환
JsonNode jsonNode = mapper.readTree(jsonData);
// JsonNode를 통한 데이터 접근
System.out.println("이름: " + jsonNode.get("name").asText());
System.out.println("나이: " + jsonNode.get("age").asInt());
System.out.println("도시: " + jsonNode.get("city").asText());
}
}
위 코드는 JSON 문자열을 JsonNode 객체로 변환한 후 각 필드에 접근하는 방법을 보여줍니다. get() 메서드를 통해 name, age, city 필드의 값을 가져올 수 있습니다.
이름: 홍길동
나이: 30
도시: 서울
동적 JSON 데이터 다루기
Jackson의 Tree Model API를 활용하면 JsonNode 객체를 통해 JSON 데이터에 필드를 추가하거나, 삭제하고, 변경할 수 있습니다. 예를 들어, ObjectNode를 활용하여 동적으로 JSON에 새로운 필드를 추가하고 기존 필드를 수정해 보겠습니다.
필드 추가하기
ObjectNode를 사용하면 JSON 데이터에 새로운 필드를 손쉽게 추가할 수 있습니다. 아래 예제에서는 phone 필드를 추가하여 JSON 데이터를 확장합니다.
import com.fasterxml.jackson.databind.node.ObjectNode;
public class Main {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
ObjectNode personNode = mapper.createObjectNode();
personNode.put("name", "김철수");
personNode.put("age", 27);
personNode.put("city", "부산");
// 필드 추가
personNode.put("phone", "010-1234-5678");
System.out.println("필드 추가 후 JSON: " + personNode.toPrettyString());
}
}
위 코드는 phone 필드를 추가한 후 JSON 데이터를 출력합니다.
{
"name" : "김철수",
"age" : 27,
"city" : "부산",
"phone" : "010-1234-5678"
}
필드 삭제하기
remove() 메서드를 통해 특정 필드를 JSON에서 제거할 수 있습니다. 아래 예제에서는 city 필드를 삭제합니다.
public class Main {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
ObjectNode personNode = mapper.createObjectNode();
personNode.put("name", "박영희");
personNode.put("age", 35);
personNode.put("city", "대전");
// 필드 삭제
personNode.remove("city");
System.out.println("필드 삭제 후 JSON: " + personNode.toPrettyString());
}
}
위 코드는 city 필드를 제거한 후의 JSON 출력을 보여줍니다.
{
"name" : "박영희",
"age" : 35
}
필드 변경하기
JSON에서 특정 필드의 값을 수정하려면 해당 필드에 새로운 값을 설정하면 됩니다. 아래 예제에서는 age 필드를 수정하는 방법을 보여줍니다.
public class Main {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
ObjectNode personNode = mapper.createObjectNode();
personNode.put("name", "최민호");
personNode.put("age", 29);
personNode.put("city", "인천");
// 필드 변경
personNode.put("age", 30);
System.out.println("필드 변경 후 JSON: " + personNode.toPrettyString());
}
}
위 코드는 age 필드를 29에서 30으로 변경하여 출력합니다.
{
"name" : "최민호",
"age" : 30,
"city" : "인천"
}
JsonNode와 ObjectMapper를 활용한 동적 JSON 처리 예제
이번에는 ObjectMapper와 JsonNode를 결합하여 JSON 데이터를 동적으로 처리하는 예제를 보여드리겠습니다. 아래 예제에서는 JSON 데이터를 읽어 특정 조건에 따라 동적으로 데이터를 수정합니다.
public class Main {
public static void main(String[] args) throws Exception {
String jsonData = "{\"name\":\"이정훈\", \"age\":22, \"city\":\"수원\"}";
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(jsonData);
ObjectNode objectNode = (ObjectNode) jsonNode;
// 조건에 따라 필드 추가 및 변경
if (objectNode.get("age").asInt() < 30) {
objectNode.put("status", "청년");
} else {
objectNode.put("status", "성인");
}
// city 필드 수정
objectNode.put("city", "서울");
System.out.println("조건에 따른 동적 처리 후 JSON: " + objectNode.toPrettyString());
}
}
위 예제는 age 필드 값을 기준으로 status 필드를 추가하고, city 필드 값을 수원에서 서울로 변경하는 조건부 처리를 보여줍니다.
{
"name" : "이정훈",
"age" : 22,
"city" : "서울",
"status" : "청년"
}
추가적인 동적 JSON 처리 예제
아래는 배열을 JSON 데이터에 추가하고 삭제하는 예제입니다.
ArrayNode 추가 예제
import com.fasterxml.jackson.databind.node.ArrayNode;
public class Main {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
ObjectNode personNode = mapper.createObjectNode();
personNode.put("name", "김수현");
personNode.put("age", 33);
// ArrayNode 생성 및 추가
ArrayNode hobbies = mapper.createArrayNode();
hobbies.add("등산");
hobbies.add("독서");
personNode.set("hobbies", hobbies);
System.out.println("배열 추가 후 JSON: " + personNode.toPrettyString());
}
}
출력 결과는 hobbies 배열이 추가된 JSON 데이터입니다.
{
"name" : "김수현",
"age" : 33,
"hobbies" : [ "등산", "독서" ]
}
참고 사이트 및 해시태그
Jackson Tree Model API에 대한 더 자세한 내용은 다음 링크에서 확인할 수 있습니다:
- 공식 Jackson 가이드: https://github.com/FasterXML/jackson
'JAVA' 카테고리의 다른 글
[JAVA] Jackson의 성능 최적화 전략 (0) | 2024.11.13 |
---|---|
[JAVA] Jackson 커스텀 모듈 사용하기 (0) | 2024.11.12 |
[JAVA] Jackson과 Java 8 이상 기능 연동 (2) | 2024.11.12 |
[JAVA] Jackson의 Data Binding API와 Tree Model API 차이점 (0) | 2024.11.12 |
[JAVA] Jackson 컬렉션 및 배열 데이터 처리 (1) | 2024.11.12 |
[JAVA] Jackson 고급 직렬화와 역직렬화 설정 (0) | 2024.11.11 |
[JAVA] Jackson 어노테이션 활용법 (0) | 2024.11.10 |
[JAVA] Jackson ObjectMapper란? (1) | 2024.11.09 |