JAVA

[JAVA] Gson과 JSON 파싱

인생아 2024. 12. 14. 19:31
반응형

Gson과 JSON 파싱은 복잡한 JSON 데이터를 다루는 데 유용합니다. JSON 데이터를 트리 구조로 표현하거나 특정 필드를 추출하거나 조건에 따라 데이터를 처리할 때 Gson의 강력한 기능을 활용할 수 있습니다. 이러한 작업은 REST API 응답 처리, 설정 파일 읽기 등 다양한 시나리오에서 필수적입니다.

JSON 데이터를 트리 구조로 파싱 (JsonObject, JsonArray)
Gson은 JSON 데이터를 트리 구조로 파싱할 수 있도록 JsonObjectJsonArray를 제공합니다. 이는 JSON 데이터에 포함된 특정 필드나 값을 탐색할 때 유용합니다.

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

public class JsonTreeParsingExample {
    public static void main(String[] args) {
        String jsonData = """
            {
                "country": "대한민국",
                "cities": [
                    {"name": "서울", "population": 9733509},
                    {"name": "부산", "population": 3413841},
                    {"name": "인천", "population": 2947404}
                ]
            }
        """;

        JsonObject jsonObject = JsonParser.parseString(jsonData).getAsJsonObject();

        // 필드 추출
        String country = jsonObject.get("country").getAsString();
        System.out.println("Country: " + country);

        // JsonArray 탐색
        JsonArray cities = jsonObject.getAsJsonArray("cities");
        for (var cityElement : cities) {
            JsonObject city = cityElement.getAsJsonObject();
            String name = city.get("name").getAsString();
            int population = city.get("population").getAsInt();
            System.out.println("City: " + name + ", Population: " + population);
        }
    }
}

위 코드는 JsonObject를 사용하여 JSON 데이터를 트리 형태로 탐색하고, 각 도시 이름과 인구를 출력합니다.

반응형

특정 필드의 값 추출
특정 JSON 필드만 필요할 때 Gson의 JsonElement를 활용하면 효율적으로 값을 추출할 수 있습니다.

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

public class ExtractFieldExample {
    public static void main(String[] args) {
        String jsonData = """
            {
                "name": "서울",
                "details": {
                    "population": 9733509,
                    "area": 605.21
                }
            }
        """;

        JsonObject jsonObject = JsonParser.parseString(jsonData).getAsJsonObject();
        JsonElement population = jsonObject.getAsJsonObject("details").get("population");

        System.out.println("Population: " + population.getAsInt());
    }
}

이 코드는 JsonObject를 중첩 탐색하여 서울의 인구를 출력합니다.

조건에 따른 JSON 데이터 처리
조건을 기반으로 특정 JSON 데이터를 처리하려면 루프와 조건문을 조합합니다. 예를 들어, 인구가 300만 이상인 도시만 필터링합니다.

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

public class ConditionalJsonProcessing {
    public static void main(String[] args) {
        String jsonData = """
            {
                "country": "대한민국",
                "cities": [
                    {"name": "서울", "population": 9733509},
                    {"name": "부산", "population": 3413841},
                    {"name": "인천", "population": 2947404}
                ]
            }
        """;

        JsonObject jsonObject = JsonParser.parseString(jsonData).getAsJsonObject();
        JsonArray cities = jsonObject.getAsJsonArray("cities");

        for (var cityElement : cities) {
            JsonObject city = cityElement.getAsJsonObject();
            int population = city.get("population").getAsInt();
            if (population > 3000000) {
                System.out.println("Major City: " + city.get("name").getAsString());
            }
        }
    }
}

위 코드는 인구 조건에 따라 주요 도시를 필터링하여 출력합니다.

Gson의 공식 문서 및 가이드

반응형