Json을 파싱하는 여러가지 방법이 있지만, google에서 만든 gson라이브러리의 JsonParser를 사용하였다.
JsonParser는 입력 파라메터 타입에 따라 3가지가 존재한다.
모두 JsonElement
를 반환한다.
String
타입com.google.gson.stream.JsonReader
타입java.io.Reader
타입위 메서드들을 통해 변환된 JsonElement를 아래 메서드를 통해 실제 활용가능한 타입으로 변경한다.
{
"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"
}
]
}
}
@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();
}
동일한 변수병을 가진 클래스를 만들어두면 String 타입의 json데이터를 바로 해당 클래스로 변환한다.
(참고한 출처)
위 사용법은 new jsonParser() 가 deprecated 되기 이전