Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 Jackson 라이브러리로 JSON을 Java 객체(Object)로 변환하는 방법

ObjectMapper 클래스는 Jackson 라이브러리에서 가장 핵심적인 클래스입니다. 이 클래스의 readValue() 메서드를 사용하면 JSON 문자열을 Java 객체로 손쉽게 변환할 수 있습니다. readValue()는 주어진 JSON 콘텐츠(문자열)를 역직렬화(deserialize)하여 지정한 Java 클래스 타입의 객체로 반환하는 역할을 담당합니다.

readValue() 메서드 구문

public <T> readValue(String content, JavaType valueType)
    throws IOException, JsonParseException, JsonMappingException

주요 예외

  • JsonParseException: JSON 문법이 올바르지 않을 때 발생합니다.
  • JsonMappingException: JSON 구조가 대상 Java 클래스와 매핑되지 않을 때 발생합니다.
  • IOException: 입출력 처리 중 오류가 발생할 때 발생합니다.

예제 코드

아래 예제에서는 Employee 객체를 JSON 문자열로 직렬화한 후, 다시 readValue() 메서드를 사용해 JSON을 Java 객체로 역직렬화하는 전체 과정을 보여줍니다.

import java.io.*;
import java.util.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;

public class JSONToJavaObjectTest {
   public static void main(String args[]) throws JsonGenerationException, JsonMappingException, IOException {
      // Employee 객체 생성 및 데이터 설정
      Employee emp1 = new Employee();
      emp1.setFirstName("Raja");
      emp1.setLastName("Ramesh");
      emp1.setId(115);
      emp1.getTechnologies().add("Java");
      emp1.getTechnologies().add("Selenium");
      emp1.getTechnologies().add("Spark");

      // ObjectMapper 인스턴스 생성
      ObjectMapper mapper = new ObjectMapper();

      // 객체를 보기 좋게 포맷팅된 JSON 문자열로 직렬화
      String jsonStr = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(emp1);
      System.out.println(jsonStr);

      // JSON 문자열을 Java 객체로 역직렬화
      System.out.println("Deserializing JSON to Object:");
      Employee emp2 = mapper.readValue(jsonStr, Employee.class);
      System.out.println(emp2.getId() + " " + emp2.getFirstName() + " " + emp2.getLastName() + " " + emp2.getTechnologies());
   }
}

// Employee 클래스
class Employee {
   private int id;
   private String firstName;
   private String lastName;
   private List technologies = new ArrayList<>();

   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public String getFirstName() {
      return firstName;
   }
   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }
   public String getLastName() {
      return lastName;
   }
   public void setLastName(String lastName) {
      this.lastName = lastName;
   }
   public List getTechnologies() {
      return technologies;
   }
   public void setTechnologies(List technologies) {
      this.technologies = technologies;
   }
}

실행 결과

{
  "id" : 115,
  "firstName" : "Raja",
  "lastName" : "Ramesh",
  "technologies" : [ "Java", "Selenium", "Spark" ]
}
Deserializing JSON to Object:
115 Raja Ramesh [Java, Selenium, Spark]

정리

위 예제에서 확인할 수 있듯이, Jackson의 ObjectMapper를 활용하면 다음과 같은 작업이 가능합니다.

  • writeValueAsString(): Java 객체 → JSON 문자열 (직렬화)
  • readValue(): JSON 문자열 → Java 객체 (역직렬화)

readValue() 메서드에 JSON 문자열과 변환 대상 클래스(.class)만 전달하면, Jackson이 내부적으로 리플렉션을 통해 필드 값을 자동으로 매핑해 줍니다. REST API 응답 파싱, 설정 파일 로딩 등 실무에서 JSON 데이터를 다루는 거의 모든 상황에서 널리 활용되는 기본 패턴이므로 꼭 숙지해 두는 것이 좋습니다.