JAVA

[JAVA] Gson과 Java 컬렉션

인생아 2024. 12. 13. 23:40
반응형

Gson은 자바의 컬렉션 타입인 리스트(List)맵(Map)을 JSON으로 변환하거나 JSON 데이터를 다시 컬렉션으로 변환할 수 있는 강력한 기능을 제공합니다. 특히, 제네릭 타입 처리를 위한 TypeToken 클래스는 이러한 작업에서 필수적입니다.

리스트(List)를 JSON으로 변환

리스트를 JSON으로 변환하는 것은 매우 간단합니다. 다음은 Person 객체 리스트를 JSON 문자열로 변환하는 예제입니다.

import com.google.gson.Gson;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        Gson gson = new Gson();

        // 리스트 생성
        List<Person> people = Arrays.asList(
            new Person("김철수", 30, "서울"),
            new Person("박영희", 25, "부산"),
            new Person("최지훈", 35, "대구")
        );

        // 리스트를 JSON으로 변환
        String json = gson.toJson(people);
        System.out.println("JSON: " + json);
    }
}

class Person {
    String name;
    int age;
    String city;

    public Person(String name, int age, String city) {
        this.name = name;
        this.age = age;
        this.city = city;
    }
}

출력 결과:

JSON: [{"name":"김철수","age":30,"city":"서울"},{"name":"박영희","age":25,"city":"부산"},{"name":"최지훈","age":35,"city":"대구"}]

위 코드는 리스트를 JSON 형식으로 직렬화하여 API 응답이나 파일 저장 등에 활용할 수 있습니다.

반응형

맵(Map)을 JSON으로 변환

맵은 키와 값을 저장하는 자료구조로, JSON으로 변환할 때도 유용합니다.

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

public class Main {
    public static void main(String[] args) {
        Gson gson = new Gson();

        // 맵 생성
        Map<String, String> countryCityMap = new HashMap<>();
        countryCityMap.put("South Korea", "서울");
        countryCityMap.put("Japan", "도쿄");
        countryCityMap.put("USA", "뉴욕");

        // 맵을 JSON으로 변환
        String json = gson.toJson(countryCityMap);
        System.out.println("JSON: " + json);
    }
}

출력 결과:

JSON: {"South Korea":"서울","Japan":"도쿄","USA":"뉴욕"}

맵을 JSON으로 변환하면 키-값 쌍이 명확히 나타나며, API 요청이나 데이터 저장에 매우 유용합니다.

JSON 데이터를 리스트 및 맵으로 변환

Gson을 사용하면 JSON 문자열을 다시 리스트 또는 으로 쉽게 역직렬화할 수 있습니다.

1. JSON 데이터를 리스트로 변환

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

public class Main {
    public static void main(String[] args) {
        Gson gson = new Gson();

        // JSON 문자열
        String json = "[{\"name\":\"김철수\",\"age\":30,\"city\":\"서울\"}," +
                      "{\"name\":\"박영희\",\"age\":25,\"city\":\"부산\"}]";

        // JSON을 리스트로 변환
        Type listType = new TypeToken<List<Person>>() {}.getType();
        List<Person> people = gson.fromJson(json, listType);

        for (Person person : people) {
            System.out.println("이름: " + person.name + ", 나이: " + person.age + ", 도시: " + person.city);
        }
    }
}

class Person {
    String name;
    int age;
    String city;
}

출력 결과:

이름: 김철수, 나이: 30, 도시: 서울
이름: 박영희, 나이: 25, 도시: 부산

2. JSON 데이터를 맵으로 변환

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

public class Main {
    public static void main(String[] args) {
        Gson gson = new Gson();

        // JSON 문자열
        String json = "{\"South Korea\":\"서울\",\"Japan\":\"도쿄\",\"USA\":\"뉴욕\"}";

        // JSON을 맵으로 변환
        Type mapType = new TypeToken<Map<String, String>>() {}.getType();
        Map<String, String> countryCityMap = gson.fromJson(json, mapType);

        countryCityMap.forEach((country, city) -> {
            System.out.println("나라: " + country + ", 도시: " + city);
        });
    }
}

출력 결과:

나라: South Korea, 도시: 서울
나라: Japan, 도시: 도쿄
나라: USA, 도시: 뉴욕

제네릭 타입 처리 방법

제네릭 타입을 처리하려면 TypeToken을 사용해야 합니다. 이는 Gson이 제네릭 타입을 인식할 수 있도록 도와줍니다.

1. 제네릭 클래스 JSON 변환 및 역직렬화

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

public class Main {
    public static void main(String[] args) {
        Gson gson = new Gson();

        // 제네릭 클래스 인스턴스 생성
        GenericClass<String> data = new GenericClass<>("Hello World!");

        // 제네릭 클래스를 JSON으로 변환
        String json = gson.toJson(data);
        System.out.println("JSON: " + json);

        // JSON을 제네릭 클래스로 역직렬화
        Type type = new TypeToken<GenericClass<String>>() {}.getType();
        GenericClass<String> result = gson.fromJson(json, type);

        System.out.println("데이터: " + result.getData());
    }
}

class GenericClass<T> {
    private T data;

    public GenericClass(T data) {
        this.data = data;
    }

    public T getData() {
        return data;
    }
}

출력 결과:

JSON: {"data":"Hello World!"}
데이터: Hello World!

참고사이트
Gson 공식 문서: https://github.com/google/gson

반응형

'JAVA' 카테고리의 다른 글

[JAVA] Gson과 날짜/시간 처리  (0) 2024.12.14
[JAVA] Gson의 필드 컨트롤  (0) 2024.12.14
[JAVA] Gson과 복합 객체  (0) 2024.12.14
[JAVA] Gson의 고급 기능  (1) 2024.12.14
[JAVA] Gson을 활용한 기본 JSON 처리  (0) 2024.11.25
[JAVA] Gson 환경 설정  (0) 2024.11.24
[JAVA] Gson 이란?  (1) 2024.11.23
[JAVA] List와 Java 8 이상 기능 통합  (0) 2024.11.22