반응형
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 |