Backend

openApi 활용(2) : gson

openDeveloper 2023. 4. 11. 22:05

Gson은 Google에서 개발한 Java 기반의 라이브러리로, JSON 데이터와 자바 객체 간의 직렬화와 역직렬화를 수행하는데 사용됩니다. Gson은 JSON 데이터를 파싱하고, JSON 문자열을 자바 객체로 변환하고, 자바 객체를 JSON 문자열로 변환할 수 있습니다.

Gson은 매우 간편하고 유연한 API를 제공하여 사용자가 JSON 데이터와 자바 객체 간의 변환을 쉽게 수행할 수 있습니다. Gson은 JSON 데이터에 대한 파싱을 수행하면서 예외를 처리하고, 개발자가 원하는 방식으로 오류를 처리할 수 있도록 해줍니다. Gson은 다른 라이브러리와의 통합도 용이하며, JSON 데이터와 자바 객체 간의 변환을 자주 수행하는 애플리케이션에서 매우 유용합니다. Gson은 오픈소스로 공개되어 있으며, 라이브러리의 문서와 예제를 참고하여 사용할 수 있습니다.

 

 

Gson 라이브러리 문서

 

GitHub - google/gson: A Java serialization/deserialization library to convert Java Objects into JSON and back

A Java serialization/deserialization library to convert Java Objects into JSON and back - GitHub - google/gson: A Java serialization/deserialization library to convert Java Objects into JSON and back

github.com

 

Gson 객체 생성

 

 Gson 객체를 Gson, GsonBuilder 으로 생성할 수 있고, GsonBuilder를 사용하면 Gson 객체를 더욱 세밀하게 조정할 수 있습니다.

import com.google.gson.Gson;

public class Example {
    public static void main(String[] args) {
        Gson gson = new Gson();
    }
}
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Example {
    public static void main(String[] args) {
        GsonBuilder gsonBuilder = new GsonBuilder();

        // 커스텀 설정을 적용합니다.
        gsonBuilder.setPrettyPrinting(); // JSON 출력시 줄바꿈과 들여쓰기 적용
        gsonBuilder.excludeFieldsWithoutExposeAnnotation(); // @Expose 어노테이션이 없는 필드는 무시
        gsonBuilder.serializeNulls(); // null 값도 JSON으로 변환

        Gson gson = gsonBuilder.create();

        // Gson 객체를 사용하여 JSON 데이터와 자바 객체 간의 변환을 수행합니다.
    }
}

Json -> Object 변환하기

 

gson.fromJson 메소드를 사용해서 (string, class) 를 전달해 객체로 받환 받을 수 있다.

 if (response.isSuccessful()) {
                ResponseBody body = response.body();
                if (body != null) {
                    String obj = body.string();
//                    System.out.println(obj);
                    JsonParser jsonParser = new JsonParser();
                    JsonObject object = (JsonObject) jsonParser.parse(obj);
                    object = (JsonObject)object.get("TbPublicWifiInfo");
                    JsonArray array = (JsonArray)object.get("row");
                    Gson gson = new Gson();
                    for(Object arr : array){
//                        System.out.println(arr.toString());
                        wifis.add(gson.fromJson(arr.toString(), Wifi.class));
                    }

//                    Wifi wifi = gson.fromJson(Json, Wifi.class);
//                    wifi.toString();
                }

JsonParser를 사용해 raw data에 상황에 맞춰 JsonObject, JsonArray를 사용하여 pasring 해주고, wifi.class를 생성해 객체로 ArrayList<wifi> 에 하나씩 넣어주었다. parsing 도움글 : https://compogetters.tistory.com/87

 

import java.util.ArrayList;

public class getController {

    private static ArrayList<Wifi> wifis ;
    public static void main(String[] args) {
        WifiGetInfoOkhttp wifi = new WifiGetInfoOkhttp();
        wifis = wifi.getUserInfo();

        for (int i = 0; i < wifis.size(); i++) {
            System.out.println(wifis.get(i).LAT + " " + wifis.get(i).LNT);
        }
    }
}

하나씩 get하여 확인해보니 객체별로 값을 제대로 뽑아낼 수 있었다. 다음은 해당 객체들은 DB에 저장해보아야겠다.