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 개발이나 외부 데이터 연동 시 매우 유용하게 활용할 수 있으니 꼭 익혀두시기 바랍니다.