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

Java Map을 JSON으로 변환하는 3가지 방법 – Jackson, Gson, org.json

자바(Java)에서 Map 객체를 JSON으로 변환해야 하는 상황은 매우 흔합니다. 배열(Array)이나 Map을 JSON으로 직렬화하거나, 그 반대로 역직렬화하는 작업은 API 통신이나 데이터 처리 과정에서 자주 마주치게 됩니다.

이 글에서는 Jackson, Gson, org.json 세 가지 대표적인 라이브러리를 사용해 Java Map을 JSON으로 변환하는 방법을 예제 코드와 함께 살펴봅니다.

1. Jackson을 사용한 Java Map → JSON 변환

첫 번째 예제는 Jackson Core와 Jackson Databind 라이브러리를 활용하는 방식입니다.

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

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

의존성을 추가했다면 아래와 같이 ObjectMapper를 사용해 Map을 JSON 문자열로 변환할 수 있습니다.

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;

import java.util.HashMap;
import java.util.Map;

public class ConvertJavaMapToJson {

    @Test
    public void convertMapToJson() {
        Map<String, String> elements = new HashMap();
        elements.put("Key1", "Value1");
        elements.put("Key2", "Value2");
        elements.put("Key3", "Value3");

        ObjectMapper objectMapper = new ObjectMapper();

        try {
            String json = objectMapper.writeValueAsString(elements);
            System.out.println(json);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

실행 결과:

{"Key2":"Value2","Key1":"Value1","Key3":"Value3"}

출력 결과를 보면 JSON에 담긴 요소들의 순서가 Map에 입력했던 순서와 다른 것을 확인할 수 있습니다. 이는 HashMap이 요소의 순서를 보장하지 않기 때문입니다.

만약 삽입한 순서(또는 키 기준 정렬 순서)를 유지하고 싶다면 HashMap 대신 SortedMap을 사용하면 됩니다.

예를 들어 다음과 같이 선언합니다.

SortedMap<String, String> elements = new TreeMap();

실행 결과:

{"Key1":"Value1","Key2":"Value2","Key3":"Value3"}
  • Java에서 JSON 파싱하는 방법
  • JSON 인코딩 및 디코딩 방법
  • Java Object를 JSON으로 변환하는 방법

2. Gson을 사용한 Java Map → JSON 변환

두 번째 예제는 Google의 Gson 라이브러리를 사용하는 방식입니다. 마찬가지로 먼저 pom.xml에 Gson 의존성을 추가해야 합니다.

<dependencies>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.5</version>
    </dependency>
</dependencies>

Gson에서는 TypeToken을 사용해 제네릭 타입 정보를 전달하면서 Map을 JSON으로 변환합니다.

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.junit.jupiter.api.Test;

import java.lang.reflect.Type;
import java.util.SortedMap;
import java.util.TreeMap;

public class ConvertJavaMapToJson {

    @Test
    public void convertMapToJson() {
        SortedMap<String, String> elements = new TreeMap();
        elements.put("Key1", "Value1");
        elements.put("Key2", "Value2");
        elements.put("Key3", "Value3");

        Gson gson = new Gson();
        Type gsonType = new TypeToken<HashMap>(){}.getType();
        String gsonString = gson.toJson(elements, gsonType);
        System.out.println(gsonString);
    }
}

실행 결과:

{"Key1":"Value1","Key2":"Value2","Key3":"Value3"}

TreeMap을 사용했기 때문에 키를 기준으로 정렬된 순서대로 JSON이 생성된 것을 볼 수 있습니다.

3. org.json을 사용한 Java Map → JSON 변환

세 번째 예제는 org.json 라이브러리를 사용하는 방식입니다. 이 라이브러리는 JSONObject 생성자에 Map을 그대로 넘겨주면 되기 때문에 코드가 가장 간결합니다.

<dependencies>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20180813</version>
    </dependency>
</dependencies>
import org.json.JSONObject;
import org.junit.jupiter.api.Test;

import java.util.HashMap;
import java.util.Map;

public class ConvertJavaMapToJson {

    @Test
    public void convertMapToJson() {
        Map<String, String> elements = new HashMap<>();
        elements.put("Key1", "Value1");
        elements.put("Key2", "Value2");
        elements.put("Key3", "Value3");

        JSONObject json = new JSONObject(elements);

        System.out.println(json);
    }
}

실행 결과:

{"Key2":"Value2","Key1":"Value1","Key3":"Value3"}

마무리: 어떤 라이브러리를 선택해야 할까?

세 가지 라이브러리 모두 Java Map을 JSON으로 손쉽게 변환할 수 있습니다. 상황에 따라 다음과 같이 선택하는 것을 추천합니다.

  • Jackson: Spring Boot 등 대규모 프레임워크 환경에서 사실상 표준처럼 사용되며, 성능과 기능 면에서 가장 강력합니다.
  • Gson: Google에서 개발한 경량 라이브러리로, 안드로이드 프로젝트나 간단한 직렬화 작업에 적합합니다.
  • org.json: 의존성이 가볍고 사용법이 단순해, 빠르게 프로토타이핑하거나 간단한 JSON 처리에 유용합니다.

또한 요소의 순서가 중요하다면 HashMap 대신 LinkedHashMap(삽입 순서 유지)이나 TreeMap(키 정렬 순서 유지)을 사용하는 점도 기억해 두세요.