JAVA

[JAVA] Jackson 컬렉션 및 배열 데이터 처리

인생아 2024. 11. 12. 00:04
반응형

Jackson 라이브러리 JSON 데이터 Java 객체 간의 변환을 쉽게 처리할 수 있으며, 특히 컬렉션(Collection)  배열 데이터의 직렬화와 역직렬화에 유용합니다.

컬렉션 데이터(JSON) 변환하기

List, Map, Set 같은 컬렉션 데이터를 JSON 형식으로 변환하는 방법을 살펴보겠습니다. 이때 Jackson의 ObjectMapper를 활용해 컬렉션을 JSON으로 직렬화하거나 JSON에서 컬렉션 객체로 역직렬화할 수 있습니다.

List 데이터 변환하기

List 컬렉션을 JSON으로 변환하는 예제입니다. 예를 들어 이름 목록을 List로 만들어 JSON 형식으로 변환해보겠습니다.

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) throws Exception {
        List<String> names = Arrays.asList("홍길동", "김철수", "이영희");
        ObjectMapper mapper = new ObjectMapper();

        // List를 JSON으로 변환
        String json = mapper.writeValueAsString(names);
        System.out.println("List JSON: " + json);

        // JSON을 List로 역직렬화
        List<String> nameList = mapper.readValue(json, List.class);
        System.out.println("List 역직렬화: " + nameList);
    }
}

위 코드에서 writeValueAsString() 메서드를 사용해 List 데이터를 JSON으로 변환하고, readValue() 메서드를 사용해 JSON 데이터를 다시 List로 변환했습니다. 출력 결과는 다음과 같습니다.

List JSON: ["홍길동","김철수","이영희"]
List 역직렬화: [홍길동, 김철수, 이영희]

Map 데이터 변환하기

Map 컬렉션을 JSON으로 변환하는 예제입니다. 키-값 쌍을 가진 데이터를 JSON으로 직렬화하여 효율적으로 관리할 수 있습니다.

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

public class Main {
    public static void main(String[] args) throws Exception {
        Map<String, Object> personInfo = new HashMap<>();
        personInfo.put("name", "김영수");
        personInfo.put("age", 40);
        personInfo.put("city", "인천");
        ObjectMapper mapper = new ObjectMapper();

        // Map을 JSON으로 변환
        String json = mapper.writeValueAsString(personInfo);
        System.out.println("Map JSON: " + json);

        // JSON을 Map으로 역직렬화
        Map<String, Object> resultMap = mapper.readValue(json, Map.class);
        System.out.println("Map 역직렬화: " + resultMap);
    }
}

위 예제는 Java Map을 JSON으로 직렬화하고 다시 Map으로 역직렬화하는 과정을 보여줍니다. 출력 결과는 다음과 같습니다.

Map JSON: {"name":"김영수","age":40,"city":"인천"}
Map 역직렬화: {name=김영수, age=40, city=인천}

Set 데이터 변환하기

Set 데이터는 중복을 허용하지 않으므로 Jackson을 사용해 JSON으로 변환할 때 유용합니다. 아래 예제는 Set 데이터를 JSON으로 변환하는 코드입니다.

import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) throws Exception {
        Set<String> fruits = new HashSet<>();
        fruits.add("사과");
        fruits.add("배");
        fruits.add("귤");
        ObjectMapper mapper = new ObjectMapper();

        // Set을 JSON으로 변환
        String json = mapper.writeValueAsString(fruits);
        System.out.println("Set JSON: " + json);

        // JSON을 Set으로 역직렬화
        Set<String> fruitSet = mapper.readValue(json, Set.class);
        System.out.println("Set 역직렬화: " + fruitSet);
    }
}

위 예제는 Set을 JSON 형식으로 직렬화하고 다시 역직렬화하는 과정을 보여줍니다.

Set JSON: ["사과","배","귤"]
Set 역직렬화: [사과, 배, 귤]
반응형

배열 데이터 Jackson으로 처리하기

Jackson은 배열 데이터의 직렬화와 역직렬화를 매우 간단하게 처리할 수 있습니다. 특히, 일차원 배열과 다차원 배열을 모두 쉽게 변환할 수 있습니다.

일차원 배열 처리

String 타입의 일차원 배열을 JSON으로 직렬화하고 역직렬화하는 예제입니다.

public class Main {
    public static void main(String[] args) throws Exception {
        String[] cities = {"서울", "부산", "대구"};
        ObjectMapper mapper = new ObjectMapper();

        // 배열을 JSON으로 변환
        String json = mapper.writeValueAsString(cities);
        System.out.println("Array JSON: " + json);

        // JSON을 배열로 역직렬화
        String[] cityArray = mapper.readValue(json, String[].class);
        System.out.println("Array 역직렬화: " + Arrays.toString(cityArray));
    }
}

이 코드에서는 String 배열을 JSON으로 직렬화하고, JSON을 다시 String 배열로 역직렬화합니다.

Array JSON: ["서울","부산","대구"]
Array 역직렬화: [서울, 부산, 대구]

다차원 배열 처리

다차원 배열의 경우에도 Jackson을 사용하여 JSON으로 직렬화할 수 있습니다. 아래 예제에서는 2차원 정수 배열을 JSON으로 변환하는 방법을 보여줍니다.

public class Main {
    public static void main(String[] args) throws Exception {
        int[][] numbers = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        ObjectMapper mapper = new ObjectMapper();

        // 다차원 배열을 JSON으로 변환
        String json = mapper.writeValueAsString(numbers);
        System.out.println("2D Array JSON: " + json);

        // JSON을 다차원 배열로 역직렬화
        int[][] numArray = mapper.readValue(json, int[][].class);
        System.out.println("2D Array 역직렬화: " + Arrays.deepToString(numArray));
    }
}

위 코드는 2차원 배열을 JSON으로 직렬화하고, JSON을 다시 다차원 배열로 역직렬화합니다.

2D Array JSON: [[1,2,3],[4,5,6],[7,8,9]]
2D Array 역직렬화: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

중첩된 컬렉션 데이터 직렬화

Jackson을 통해 중첩된 컬렉션 데이터를 JSON으로 변환할 수도 있습니다. 아래 예제는 List와 Map이 중첩된 구조를 JSON으로 직렬화하는 방법을 보여줍니다.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws Exception {
        List<Map<String, Object>> peopleList = new ArrayList<>();
        
        Map<String, Object> person1 = new HashMap<>();
        person1.put("name", "김민수");
        person1.put("age", 30);
        person1.put("city", "서울");

        Map<String, Object> person2 = new HashMap<>();
        person2.put("name", "박지수");
        person2.put("age", 25);
        person2.put("city", "대전");

        peopleList.add(person1);
        peopleList.add(person2);

        ObjectMapper mapper = new ObjectMapper();

        // 중첩된 컬렉션 데이터를 JSON으로 변환
        String json = mapper.writeValueAsString(peopleList);
        System.out.println("Nested Collection JSON: " + json);

        // JSON을 중첩된 컬렉션으로 역직렬화
        List<Map<String, Object>> deserializedList = mapper.readValue(json, List.class);
        System.out.println("Nested Collection 역직렬화: " + deserializedList);
    }
}

이 코드에서 List<Map<String, Object>> 형식을 JSON으로 변환하였고, JSON을 다시 중첩된 컬렉션 구조로 역직렬화하였습니다.

Nested Collection JSON: [{"name":"김민수","age":30,"city":"서울"},{"name":"박지수","age":25,"city":"대전"}]
Nested Collection 역직렬화: [{name=김민수, age=30, city=서울}, {name=박지수, age=25, city=대전}]

참고 사이트 및 해시태그

Jackson에 대한 공식 문서는 다음 링크에서 확인할 수 있습니다:

반응형