Java

[Java] Jackson - ObjectNode 다루기

비번변경 2026. 4. 10. 11:26

개요

2026.04.08-[Java] Jackson - JsonNode 다루기에서 JSON 데이터를 다루기 위한 기본적인 클래스인 JsonNode에 대해 알아보았다. 하지만 JsonNode는 불변 객체로 값 수정을 할 수 없기 때문에 값을 수정하거나 추가하는 등의 작업을 수행하기에는 적합하지 않다. 이런 경우를 위해 Jackson은 ObjectNode라는 클래스를 제공한다.

사용법을 알아보자.

 

 

ObjectNode

Jackson의 ObjecNode는 JSON 객체를 Java 코드 상에서 동적으로 생성, 수정, 삭제할 수 있는, 즉 변경 가능한(Mutable) JsonNode 하위 클래스다. 빈 ObjecNode를 생성하여 put, set과 같은 메서드로 키와 값을 추가할 수 있어 유영한 데이터 조작이 필요할 때 사용한다.

 

 

사용법

먼저 ObjectNode를 생성하여 값을 추가한 뒤, 직렬화해 보겠다. 빈 ObjectNode는 ObjectMapper.createObjectNode로 생성하고, put을 사용해 값을 추가한다.

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

public class main {
    public static void main(String[] args) {
        ObjectMapper objectMapper = new ObjectMapper();

        ObjectNode root = objectMapper.createObjectNode();
        root.put("name","John");
        root.put("age", 20);

        try {
            System.out.println(objectMapper.writeValueAsString(root));
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }

    }

 

다음으로 역직렬화를 해보자. JSON 문자열을 ObjectNode로 변환할 때는 JsonNode를 거쳐야 한다. 때문에 ObjectMapper.readTree로 JsonNode 객체를 얻은 뒤, ObjectNode로 형변환하여 사용하면 된다.

아래 코드는 JSON 문자열을 ObjectNode로 변환하여 값을 추가한 예시다.

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

public class main {
    public static void main(String[] args) {
        String json = "{\"name\":\"Passwd\",\"age\":30}";

        // ObjectMapper 생성
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = null;
        try {
            jsonNode = objectMapper.readTree(json);

            // JsonNode -> JsonNode
            ObjectNode node = (ObjectNode) jsonNode;
            
            // 값 추가
            node.put("sex", "male");
            System.out.println(node);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }
}

 

 

 

 

참고 문서

https://yeonyeon.tistory.com/136

https://dejavuhyo.github.io/posts/java-jackson-jsonnode-objectnode/

https://getthismoment.tistory.com/82

 

 

728x90