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에 대한 공식 문서는 다음 링크에서 확인할 수 있습니다:
- 공식 Jackson 가이드: https://github.com/FasterXML/jackson
'JAVA' 카테고리의 다른 글
[JAVA] Jackson 커스텀 모듈 사용하기 (0) | 2024.11.12 |
---|---|
[JAVA] Jackson과 Java 8 이상 기능 연동 (2) | 2024.11.12 |
[JAVA] Jackson의 Data Binding API와 Tree Model API 차이점 (0) | 2024.11.12 |
[JAVA] Jackson Tree Model API 활용하기 (1) | 2024.11.12 |
[JAVA] Jackson 고급 직렬화와 역직렬화 설정 (0) | 2024.11.11 |
[JAVA] Jackson 어노테이션 활용법 (0) | 2024.11.10 |
[JAVA] Jackson ObjectMapper란? (1) | 2024.11.09 |
[JAVA] Jackson 환경 설정 (1) | 2024.11.08 |