PHpullh
학습 라이브러리/Java/Jackson JSON 처리

JAVA · 파일/IO

Jackson JSON 처리

Java 생태계의 표준 JSON 라이브러리 Jackson으로 직렬화/역직렬화를 마스터합니다.

파일/IO중급JacksonObjectMapper@JsonProperty@JsonIgnoreJsonNode

핵심 설명

Java 생태계의 표준 JSON 라이브러리 Jackson으로 직렬화/역직렬화를 마스터합니다.

Java code

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

// Jackson 어노테이션
@JsonIgnoreProperties(ignoreUnknown = true)
record User(
    @JsonProperty("user_id") int id,
    @JsonProperty("full_name") String name,
    @JsonIgnore String password,
    @JsonInclude(JsonInclude.Include.NON_NULL) String email
) {}

// 상속 처리
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
    @JsonSubTypes.Type(value = Dog.class, name = "dog"),
    @JsonSubTypes.Type(value = Cat.class, name = "cat")
})
abstract class Animal { public abstract String sound(); }
class Dog extends Animal { public String sound() { return "멍멍"; } }
class Cat extends Animal { public String sound() { return "야옹"; } }

public class JacksonDemo {
    public static void main(String[] args) throws Exception {
        var mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);

        // 직렬화
        var user = new User(1, "Alice", "secret", "alice@test.com");
        String json = mapper.writeValueAsString(user);
        System.out.println(json);

        // 역직렬화
        String input = """
            {"user_id": 2, "full_name": "Bob", "unknown_field": "ignored"}
            """;
        User decoded = mapper.readValue(input, User.class);
        System.out.println(decoded.name()); // Bob

        // 컬렉션
        String listJson = "[1, 2, 3]";
        var list = mapper.readValue(listJson,
            mapper.getTypeFactory().constructCollectionType(
                java.util.List.class, Integer.class));

        // JsonNode — 동적 JSON
        JsonNode root = mapper.readTree(json);
        System.out.println(root.get("full_name").asText());
        System.out.println(root.has("password")); // false

        // ObjectNode 빌드
        ObjectNode node = mapper.createObjectNode();
        node.put("name", "Java");
        node.put("version", 21);
        node.putArray("features").add("Records").add("Sealed");
        System.out.println(mapper.writeValueAsString(node));
    }
}

학습 팁

ObjectMapper는 스레드 안전하며 생성 비용이 큽니다. 싱글턴으로 관리하거나 Spring의 자동 주입을 사용하세요.

주의할 점

@JsonIgnoreProperties(ignoreUnknown = true) 없이 알 수 없는 필드가 포함된 JSON을 역직렬화하면 UnrecognizedPropertyException이 발생합니다.

자주 묻는 질문

Jackson JSON 처리란 무엇인가요?

Java 생태계의 표준 JSON 라이브러리 Jackson으로 직렬화/역직렬화를 마스터합니다.

Jackson JSON 처리 학습 시 주의할 점은 무엇인가요?

@JsonIgnoreProperties(ignoreUnknown = true) 없이 알 수 없는 필드가 포함된 JSON을 역직렬화하면 UnrecognizedPropertyException 이 발생합니다.