JAVA

[JAVA] Map과 JSON 데이터 변환

인생아 2024. 11. 6. 13:08
반응형

MapJSON 간의 변환은 Java에서 데이터를 저장하고 전송하는데 자주 사용됩니다. JSON(JavaScript Object Notation)은 데이터 교환 형식으로 자주 쓰이며, JacksonGson은 Java에서 JSON과 Map 간의 변환을 쉽게 할 수 있게 해주는 라이브러리입니다. 이 글에서는 Map을 JSON으로 변환하기, JSON 데이터를 Map으로 파싱하여 데이터 처리하기, 그리고 Map과 JSON 변환 시 주의사항을 알아보겠습니다.

Map을 JSON으로 변환하기 (Jackson, Gson 활용)

Jackson 라이브러리를 사용한 Map을 JSON 변환

Jackson 라이브러리는 JSON 데이터 변환에 자주 쓰이는 강력한 툴입니다. ObjectMapper를 이용해 간단하게 Map을 JSON 문자열로 변환할 수 있습니다. 다음 예제에서 Jackson의 사용법을 확인해보세요.

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;

public class JacksonExample {
    public static void main(String[] args) throws Exception {
        Map<String, Object> map = new HashMap<>();
        map.put("name", "Alice");
        map.put("age", 30);
        map.put("city", "Seoul");

        ObjectMapper mapper = new ObjectMapper();
        String jsonString = mapper.writeValueAsString(map);

        System.out.println(jsonString); // {"name":"Alice","age":30,"city":"Seoul"}
    }
}

위 예제에서 ObjectMapper의 writeValueAsString() 메서드는 Map을 JSON 문자열로 변환하는 기능을 합니다. 이처럼 JSON 변환은 데이터를 외부 시스템으로 전송하거나 파일로 저장할 때 유용합니다.

Gson 라이브러리를 사용한 Map을 JSON 변환

Gson도 JSON 변환에 널리 쓰이는 라이브러리입니다. Gson의 toJson() 메서드를 통해 Map을 쉽게 JSON 형식의 문자열로 변환할 수 있습니다.

import com.google.gson.Gson;
import java.util.HashMap;
import java.util.Map;

public class GsonExample {
    public static void main(String[] args) {
        Map<String, Object> map = new HashMap<>();
        map.put("name", "Alice");
        map.put("age", 30);
        map.put("city", "Seoul");

        Gson gson = new Gson();
        String jsonString = gson.toJson(map);

        System.out.println(jsonString); // {"name":"Alice","age":30,"city":"Seoul"}
    }
}

Gson을 사용하면 코드가 간결하며, JSON으로의 변환이 더욱 직관적입니다. Gson은 JSON 변환에 최적화되어 있어 Jackson과 같이 빠른 변환 속도를 자랑합니다.

JSON 데이터를 Map으로 파싱하여 데이터 처리

Jackson을 사용한 JSON 문자열을 Map으로 파싱

Jackson의 readValue() 메서드를 사용하면 JSON 문자열을 Map으로 쉽게 변환할 수 있습니다. 아래 예제에서는 JSON 문자열을 Map으로 파싱해 데이터에 접근하는 방법을 보여줍니다.

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;

public class JacksonParseExample {
    public static void main(String[] args) throws Exception {
        String jsonString = "{\"name\":\"Alice\",\"age\":30,\"city\":\"Seoul\"}";

        ObjectMapper mapper = new ObjectMapper();
        Map<String, Object> map = mapper.readValue(jsonString, Map.class);

        System.out.println(map); // {name=Alice, age=30, city=Seoul}
        System.out.println("Name: " + map.get("name")); // Alice
    }
}

이처럼 JSON 문자열을 Map으로 변환하여 데이터를 추출할 수 있습니다. Jackson의 readValue() 메서드는 유연하고 다형성이 뛰어나 JSON 데이터를 다양한 타입으로 파싱하기에 적합합니다.

Gson을 사용한 JSON 문자열을 Map으로 파싱

Gson의 fromJson() 메서드를 사용하면 JSON 문자열을 Map으로 쉽게 변환할 수 있습니다.

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Map;

public class GsonParseExample {
    public static void main(String[] args) {
        String jsonString = "{\"name\":\"Alice\",\"age\":30,\"city\":\"Seoul\"}";

        Gson gson = new Gson();
        Type type = new TypeToken<Map<String, Object>>() {}.getType();
        Map<String, Object> map = gson.fromJson(jsonString, type);

        System.out.println(map); // {name=Alice, age=30, city=Seoul}
        System.out.println("City: " + map.get("city")); // Seoul
    }
}

Gson에서는 TypeToken을 사용해 제네릭 타입을 명시함으로써 Map 타입의 JSON 파싱을 보다 정확하게 할 수 있습니다. Gson은 간편하면서도 확장성이 뛰어난 JSON 파서로, 데이터를 간단하게 추출할 수 있습니다.

Map과 JSON 변환 시 주의사항

Map과 JSON 간의 변환에서 몇 가지 중요한 점을 고려해야 합니다. 특히 Java에서 JSON과 Map 변환 시 데이터 손실 가능성, Nested 구조 처리, null 값 처리에 주의해야 합니다.

1. 데이터 손실 가능성: Map의 데이터 타입은 제한적이지 않지만 JSON은 정수, 문자열, 배열, 객체 등으로 구성됩니다. 이로 인해 변환 시 데이터 타입 손실이 발생할 수 있습니다. 예를 들어, JSON에서 숫자 값은 Double로 변환되는 경우가 있어 정확성을 위해 데이터 타입을 명확히 관리하는 것이 좋습니다.

2. Nested 구조 처리: Map 안에 또 다른 Map이나 List가 있는 경우, JacksonGson 모두 이러한 중첩 구조를 인식해 변환할 수 있습니다. 하지만 중첩된 JSON 구조를 정확히 반영하려면 변환 시 올바른 타입을 지정하는 것이 중요합니다.

Map<String, Object> nestedMap = new HashMap<>();
Map<String, String> address = new HashMap<>();
address.put("city", "Seoul");
address.put("zip", "12345");
nestedMap.put("name", "Alice");
nestedMap.put("address", address);

3. null 값 처리: JSON 변환 시 null 값 처리는 Jackson과 Gson에서 기본적으로 지원됩니다. 예를 들어, Gson의 경우 serializeNulls() 옵션을 사용해 null 값을 명시적으로 포함하거나 제외할 수 있습니다.

Gson gson = new GsonBuilder().serializeNulls().create();

4. 타입 안정성: JSON에서 숫자나 Boolean 등의 타입이 변경될 수 있으므로 타입 안정성을 위해 Map의 타입을 명확히 설정하거나 제네릭 타입을 사용하는 것이 좋습니다.

참고사이트

반응형