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 이 발생합니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.