[GSON]JsonParser

꾸준히·2023년 3월 28일
0

Json Parsing

Json을 파싱하는 여러가지 방법이 있지만, google에서 만든 gson라이브러리의 JsonParser를 사용하였다.

JsonParser

파라메터 별 타입

JsonParser는 입력 파라메터 타입에 따라 3가지가 존재한다.

모두 JsonElement 를 반환한다.

  • JsonParser.parseString - String 타입
  • JsonParser.parseReader - com.google.gson.stream.JsonReader 타입
  • JsonParser.parseReader -java.io.Reader 타입

JsonElement를 변환

위 메서드들을 통해 변환된 JsonElement를 아래 메서드를 통해 실제 활용가능한 타입으로 변경한다.

  • getAS__에 해당하는 메서드 들로, __ 에 해당하는 타입으로 변환시켜준다.
  • 적절한 데이터 타입을 선택해서 변환하면 된다.

JsonObject

  • JsonObject 타입은 Json을 key와 value를 가지는 객체에 매핑시켜 줌으로써, 직관적이고, 객체 그래프 탐색으로 접근하기 쉽다.

예시 Json 데이터

{
    "TbPublicWifiInfo": {
        "list_total_count": 23406,
        "RESULT": {
            "CODE": "INFO-000",
            "MESSAGE": "정상 처리되었습니다"
        },
        "row": [
            {
                "X_SWIFI_MGR_NO": "--GR050009-1",
                "X_SWIFI_WRDOFC": "구로구",
                "X_SWIFI_MAIN_NM": "생활지역",
                "X_SWIFI_ADRES1": "구로동 741-27",
                "X_SWIFI_ADRES2": "서울구로지역자활센터",
                "X_SWIFI_INSTL_FLOOR": "",
                "X_SWIFI_INSTL_TY": "1. 주요거리",
                "X_SWIFI_INSTL_MBY": "교체예정",
                "X_SWIFI_SVC_SE": "공공WiFi",
                "X_SWIFI_CMCWR": "자가망_U무선망",
                "X_SWIFI_CNSTC_YEAR": "2016",
                "X_SWIFI_INOUT_DOOR": "실외",
                "X_SWIFI_REMARS3": "",
                "LAT": "126.88673",
                "LNT": "37.489075",
                "WORK_DTTM": "2023-03-28 10:58:17.0"
            }
        ]
    }
}

Parsing 방법

@Test
    void JsonParserTest() {
        String jsonData = "{\n" +
                "    \"TbPublicWifiInfo\": {\n" +
                "        \"list_total_count\": 23406,\n" +
                "        \"RESULT\": {\n" +
                "            \"CODE\": \"INFO-000\",\n" +
                "            \"MESSAGE\": \"정상 처리되었습니다\"\n" +
                "        },\n" +
                "        \"row\": [\n" +
                "            {\n" +
                "                \"X_SWIFI_MGR_NO\": \"--GR050009-1\",\n" +
                "                \"X_SWIFI_WRDOFC\": \"구로구\",\n" +
                "                \"X_SWIFI_MAIN_NM\": \"생활지역\",\n" +
                "                \"X_SWIFI_ADRES1\": \"구로동 741-27\",\n" +
                "                \"X_SWIFI_ADRES2\": \"서울구로지역자활센터\",\n" +
                "                \"X_SWIFI_INSTL_FLOOR\": \"\",\n" +
                "                \"X_SWIFI_INSTL_TY\": \"1. 주요거리\",\n" +
                "                \"X_SWIFI_INSTL_MBY\": \"교체예정\",\n" +
                "                \"X_SWIFI_SVC_SE\": \"공공WiFi\",\n" +
                "                \"X_SWIFI_CMCWR\": \"자가망_U무선망\",\n" +
                "                \"X_SWIFI_CNSTC_YEAR\": \"2016\",\n" +
                "                \"X_SWIFI_INOUT_DOOR\": \"실외\",\n" +
                "                \"X_SWIFI_REMARS3\": \"\",\n" +
                "                \"LAT\": \"126.88673\",\n" +
                "                \"LNT\": \"37.489075\",\n" +
                "                \"WORK_DTTM\": \"2023-03-28 10:58:17.0\"\n" +
                "            }\n" +
                "        ]\n" +
                "    }\n" +
                "}";
        JsonObject jsonObject = JsonParser.parseString(jsonData).getAsJsonObject();
        System.out.println(jsonObject);

        JsonObject tbPublicWifiInfo = jsonObject.get("TbPublicWifiInfo").getAsJsonObject();

        // list_total_count
        int listTotalCount = tbPublicWifiInfo.get("list_total_count").getAsInt();
        System.out.println(listTotalCount);

        JsonArray row = tbPublicWifiInfo.get("row").getAsJsonArray();

        // row
        JsonObject rowObject = row.get(0).getAsJsonObject();
        String X_SWIFI_MGR_NO = rowObject.get("X_SWIFI_MGR_NO").getAsString();
        String X_SWIFI_WRDOFC = rowObject.get("X_SWIFI_WRDOFC").getAsString();
        String X_SWIFI_MAIN_NM = rowObject.get("X_SWIFI_MAIN_NM").getAsString();
        String X_SWIFI_ADRES1 = rowObject.get("X_SWIFI_ADRES1").getAsString();
        String X_SWIFI_ADRES2 = rowObject.get("X_SWIFI_ADRES2").getAsString();
        String X_SWIFI_INSTL_FLOOR = rowObject.get("X_SWIFI_INSTL_FLOOR").getAsString();
        String X_SWIFI_INSTL_MBY = rowObject.get("X_SWIFI_INSTL_MBY").getAsString();
        String X_SWIFI_SVC_SE = rowObject.get("X_SWIFI_SVC_SE").getAsString();
        String X_SWIFI_CMCWR = rowObject.get("X_SWIFI_CMCWR").getAsString();
        String X_SWIFI_CNSTC_YEAR = rowObject.get("X_SWIFI_CNSTC_YEAR").getAsString();
        String X_SWIFI_INOUT_DOOR = rowObject.get("X_SWIFI_INOUT_DOOR").getAsString();
        String X_SWIFI_REMARS3 = rowObject.get("X_SWIFI_REMARS3").getAsString();
        double LAT = rowObject.get("LAT").getAsDouble();
        double LNT = rowObject.get("LNT").getAsDouble();
        String WORK_DTTM = rowObject.get("WORK_DTTM").getAsString();

    }

GSON 클래스를 이용하여 바로 사용자 정의 클래스로 변환


동일한 변수병을 가진 클래스를 만들어두면 String 타입의 json데이터를 바로 해당 클래스로 변환한다.


(참고한 출처)

Gson 사용하여 Json 생성 및 파싱

위 사용법은 new jsonParser() 가 deprecated 되기 이전

새로 변경된 JsonParser 사용법

  • 정적 메서드로 변경됨

0개의 댓글