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

Java Jackson 라이브러리로 JSON과 Map 간 손쉽게 변환하는 방법

Jackson은 Java에서 가장 널리 사용되는 JSON 처리 라이브러리 중 하나로, 매우 강력한 데이터 바인딩 기능을 제공합니다. 이 라이브러리를 활용하면 사용자 정의 Java 객체를 JSON으로 직렬화하거나, JSON을 다시 Java 객체로 역직렬화할 수 있습니다.

특히 com.fasterxml.jackson.databind.ObjectMapper 클래스의 readValue() 메서드와 writeValueAsString() 메서드를 사용하면 JSON ↔ Map 변환을 몇 줄의 코드로 간단하게 처리할 수 있습니다.

사전 준비: Jackson 의존성 추가

Jackson을 사용하려면 먼저 프로젝트에 라이브러리를 추가해야 합니다. Maven 프로젝트라면 pom.xml에 다음 의존성을 추가하세요.

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

1. JSON을 Map으로 변환하기

JSON 문자열을 Map 객체로 변환하려면 readValue() 메서드를 사용합니다. Map처럼 제네릭 타입이 포함된 경우에는 TypeReference를 함께 전달해야 컴파일 시 타입 안정성이 보장됩니다.

문법

public <T> T readValue(String content, TypeReference valueTypeRef)
    throws IOException, JsonParseException, JsonMappingException

예제 코드

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

public class ConvertJSONToMapTest {
    public static void main(String args[]) {
        try {
            ObjectMapper mapper = new ObjectMapper();
            String jsonString = "{\"Name\":\"Raja\", \"Technology\":\"Java\"}";

            // JSON 문자열을 Map으로 변환
            Map<String, Object> jsonMap = mapper.readValue(
                jsonString,
                new TypeReference<Map<String, String>>(){}
            );

            System.out.println(jsonMap);
        } catch(IOException ie) {
            ie.printStackTrace();
        }
    }
}

실행 결과

{Name=Raja, Technology=Java}

위 예제에서는 JSON 문자열의 각 키-값 쌍이 Map의 요소로 그대로 매핑된 것을 확인할 수 있습니다.

2. Map을 JSON으로 변환하기

반대로 Map 객체를 JSON 문자열로 변환할 때는 writeValueAsString() 메서드를 사용합니다. 이 메서드는 전달받은 객체를 JSON 형식의 문자열로 직렬화하여 반환합니다.

문법

public String writeValueAsString(Object value) throws JsonProcessingException

예제 코드

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

public class ConvertMapToJSONTest {
    public static void main(String args[]) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = "";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("Raja", "Java Technology");
        map.put("Ravi", "Python Technology");
        map.put("Adithya", "Spark Technology");
        map.put("Vamsi", "Web Technology");

        // Map을 JSON 문자열로 변환
        jsonString = mapper.writeValueAsString(map);

        System.out.println(jsonString);
    }
}

실행 결과

{"Raja":"Java Technology", "Vamsi":"Web Technology", "Ravi":"Python Technology", "Adithya":"Spark Technology"}

정리 및 참고 사항

  • readValue(): JSON 문자열 → Java 객체(Map 등) 역직렬화에 사용됩니다.
  • writeValueAsString(): Java 객체 → JSON 문자열 직렬화에 사용됩니다.
  • 예제에서 사용한 HashMap은 순서를 보장하지 않으므로, 실행 결과의 키 출력 순서는 매번 달라질 수 있습니다. 입력한 순서를 유지하고 싶다면 LinkedHashMap을 사용하세요.
  • 두 메서드 모두 IO 또는 처리 중 오류가 발생할 수 있으므로 IOException, JsonProcessingException 등의 예외 처리를 반드시 해주어야 합니다.

이처럼 Jackson의 ObjectMapper만 있으면 별도의 복잡한 설정 없이도 JSON과 Map 간 변환을 손쉽게 구현할 수 있습니다. REST API 개발이나 외부 데이터 연동 시 매우 유용하게 활용할 수 있으니 꼭 익혀두시기 바랍니다.