JAVA

[JAVA] Gson과 복합 객체

인생아 2024. 12. 14. 11:51
반응형

Gson은 간단한 객체와 배열뿐만 아니라 중첩 객체복잡한 데이터 구조를 효과적으로 처리할 수 있는 강력한 기능을 제공합니다. 또한, 특정 필드만 선택적으로 처리할 수 있는 기능도 있어 대규모 JSON 데이터를 다룰 때 효율적입니다.

중첩 객체를 처리하는 방법

중첩 객체는 클래스 내에 또 다른 클래스를 포함하는 형태의 구조를 말합니다. Gson은 이러한 중첩 구조를 자연스럽게 직렬화하고 역직렬화할 수 있습니다.

예제: 중첩 객체 처리

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Main {
    public static void main(String[] args) {
        // 객체 생성
        Address address = new Address("서울특별시", "강남구");
        User user = new User("김철수", 25, address);

        // Gson 객체
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        // 직렬화
        String json = gson.toJson(user);
        System.out.println("직렬화된 JSON:");
        System.out.println(json);

        // 역직렬화
        User deserializedUser = gson.fromJson(json, User.class);
        System.out.println("\n역직렬화된 객체:");
        System.out.println("이름: " + deserializedUser.name);
        System.out.println("나이: " + deserializedUser.age);
        System.out.println("주소: " + deserializedUser.address.city + ", " + deserializedUser.address.district);
    }
}

class User {
    String name;
    int age;
    Address address;

    public User(String name, int age, Address address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }
}

class Address {
    String city;
    String district;

    public Address(String city, String district) {
        this.city = city;
        this.district = district;
    }
}

출력 결과:

직렬화된 JSON:
{
  "name": "김철수",
  "age": 25,
  "address": {
    "city": "서울특별시",
    "district": "강남구"
  }
}

역직렬화된 객체:
이름: 김철수
나이: 25
주소: 서울특별시, 강남구
반응형

다차원 배열 및 복잡한 데이터 구조 처리

Gson은 다차원 배열이나 복합적인 데이터 구조도 문제없이 처리할 수 있습니다.

예제: 다차원 배열 처리

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Main {
    public static void main(String[] args) {
        // 다차원 배열 생성
        int[][] scores = {
            {90, 85, 80},
            {75, 88, 92},
            {60, 70, 78}
        };

        // Gson 객체
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        // 직렬화
        String json = gson.toJson(scores);
        System.out.println("다차원 배열 JSON:");
        System.out.println(json);

        // 역직렬화
        int[][] deserializedScores = gson.fromJson(json, int[][].class);
        System.out.println("\n역직렬화된 배열:");
        for (int[] row : deserializedScores) {
            for (int score : row) {
                System.out.print(score + " ");
            }
            System.out.println();
        }
    }
}

출력 결과:

다차원 배열 JSON:
[
  [90, 85, 80],
  [75, 88, 92],
  [60, 70, 78]
]

역직렬화된 배열:
90 85 80 
75 88 92 
60 70 78

복잡한 데이터 구조 처리

복합적인 JSON 데이터는 객체 내 배열, 배열 내 객체 등이 포함된 구조입니다. Gson은 이러한 데이터를 유연하게 처리합니다.

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

public class Main {
    public static void main(String[] args) {
        // 객체 생성
        Address address1 = new Address("부산광역시", "해운대구");
        Address address2 = new Address("인천광역시", "남동구");
        Company company = new Company("대한전자", List.of(address1, address2));

        // Gson 객체
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        // 직렬화
        String json = gson.toJson(company);
        System.out.println("복합 객체 JSON:");
        System.out.println(json);

        // 역직렬화
        Company deserializedCompany = gson.fromJson(json, Company.class);
        System.out.println("\n역직렬화된 객체:");
        System.out.println("회사명: " + deserializedCompany.name);
        for (Address addr : deserializedCompany.addresses) {
            System.out.println("주소: " + addr.city + ", " + addr.district);
        }
    }
}

class Company {
    String name;
    List<Address> addresses;

    public Company(String name, List<Address> addresses) {
        this.name = name;
        this.addresses = addresses;
    }
}

출력 결과:

복합 객체 JSON:
{
  "name": "대한전자",
  "addresses": [
    {
      "city": "부산광역시",
      "district": "해운대구"
    },
    {
      "city": "인천광역시",
      "district": "남동구"
    }
  ]
}

역직렬화된 객체:
회사명: 대한전자
주소: 부산광역시, 해운대구
주소: 인천광역시, 남동구

복합 JSON에서 특정 필드만 처리하기

대규모 JSON 데이터에서 특정 필드만 선택적으로 처리하려면 JsonObject를 사용하거나 사용자 정의 직렬화/역직렬화를 활용하면 됩니다.

예제: 특정 필드만 처리

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class Main {
    public static void main(String[] args) {
        String json = "{\"name\":\"김영희\",\"age\":30,\"city\":\"대전\",\"department\":\"개발팀\"}";

        // JSON 파싱 후 특정 필드 추출
        JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
        String name = jsonObject.get("name").getAsString();
        String city = jsonObject.get("city").getAsString();

        System.out.println("추출된 데이터:");
        System.out.println("이름: " + name);
        System.out.println("도시: " + city);
    }
}

출력 결과:

추출된 데이터:
이름: 김영희
도시: 대전
 

참고사이트

Gson 공식 문서: https://github.com/google/gson

반응형

'JAVA' 카테고리의 다른 글

[JAVA] Gson을 활용한 성능 최적화  (0) 2024.12.14
[JAVA] Gson과 JSON 파싱  (0) 2024.12.14
[JAVA] Gson과 날짜/시간 처리  (0) 2024.12.14
[JAVA] Gson의 필드 컨트롤  (0) 2024.12.14
[JAVA] Gson의 고급 기능  (1) 2024.12.14
[JAVA] Gson과 Java 컬렉션  (0) 2024.12.13
[JAVA] Gson을 활용한 기본 JSON 처리  (0) 2024.11.25
[JAVA] Gson 환경 설정  (0) 2024.11.24