[스프링]Spring json 파싱하기

모래·2022년 8월 31일
1

졸업프로젝트

목록 보기
6/9

졸업프로젝트를 하면서 썼던 JSON parser에 대해 내가 보려고 정리함!

티맵 api를 이용해서 데이터를 받아오는거도 성공했는데
예시만 봐도 Response Parameter가 정말 많다.

우리가 저 많은 데이터를 전부 다 쓸건 아닌데 말이다!

특히 통합검색은 결과를 하나만 받아오는 것도 아니고..

결과 받아와본 것만 봐도 어지럽다..😂

확실히 저기서 필요한 데이터만 뽑아서 써야겠다는 생각이 들었다.

json 데이터로 받아오는데 저걸 필요한 것만 어떻게 가져오지?

그래서 찾아보다가 발견한게 JSON 파싱하는 것이었다.

1. JSON 파싱하기

먼저 JSON 파싱을 하기 위해 json-simple이라는 라이브러리를 사용하는데,
build.gradle에

implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'

이걸 추가해주면 된다.

아니면

IntelliJ에서 Project Structure 👉 Modules 👉 Dependencies 에서 + 를 누르고
1 JARs or Directories를 누르고 다운 받은 json-simple-1.1.1.jar 를 추가해주는 방법도 있다.

아무튼,

내가 필요한 데이터를 이제 json 파싱을 이용해서 뽑아와보자!

나는 searchPoiInfo의, pois의 poi 안의 middleAddrName,roadName,firstBuildNo 를 예시로 해보겠다.
어우 복잡해!😫

먼저 json 파싱하기 위해 JSONParser parser = new JSONParser(); 를 선언해주고,

searchPoiInfo에는 { } 안에 여러 데이터들이 객체로 들어있다.

티맵 데이터를 나는 result.getBody()를 통해 받아왔기 때문에 이걸 넣어준다.
4.[스프링]Spring RestTemplate 에 코드가 있음!

아무튼 그래서 JSONObject object = (JSONObject) parser.parse(result.getBody());
JSONObject searchPoiInfo = (JSONObject) object.get("searchPoiInfo");

그리고 그 안의 pois를 가져와야 하는데 이 안에 데이터가 또 { } 안의 객체로 들어있네?
그럼 얘도 JSONObject pois = (JSONObject) searchPoiInfo.get("pois");

그런데 그 안의 poi 안의 데이터가 [] 인걸보니 배열 형태이다.
배열은 JSONArray를 사용한다더라..

그래서 JSONArray poiArr = (JSONArray) pois.get("poi");

배열은 for문을 통해 poiArr의 크기만큼 돌려준 다음,
object = (JSONObject) poiArr.get(i); 를 통해 데이터를 얻어와준다.

이렇게 파싱을 해줬으니 이제 드디어 내가 필요한 데이터를 가져올 수 있다..
String middleAddrName = (String) object.get("middleAddrName");
String roadName = (String) object.get("roadName");
String firstBuildNo = (String) object.get("firstBuildNo");

을 해서 저 3가지 데이터를 뽑아서,
가공한 데이터를 findDto에 설정을 해서 그 findDto를 return 해오는 방식으로 작성했다.

JSONParser parser = new JSONParser();
JSONObject object = (JSONObject) parser.parse(result.getBody());
JSONObject searchPoiInfo = (JSONObject) object.get("searchPoiInfo");
JSONObject pois = (JSONObject) searchPoiInfo.get("pois");
JSONArray poiArr = (JSONArray) pois.get("poi");
for(int i = 0 ; i<poiArr.size();i++){
			object = (JSONObject) poiArr.get(i);
            String middleAddrName = (String) object.get("middleAddrName"); 
            String roadName = (String) object.get("roadName"); 
            String firstBuildNo = (String) object.get("firstBuildNo"); 
                
            findDto.setMiddleAddrName(middleAddrName);
            findDto.setRoadName(roadName);
            findDto.setFirstBuildNo(firstBuildNo);
}

즉, 오브젝트의 경우는 JSONObject를, 배열일 경우는 JSONArray를 이용하면 된다.
JSONObject는 get("key의 값") 을 통해 받아오고, JSONArray는 get(index)를 통해 가져온 후에 받아오면 된다.

그렇게 내가 받아온 것을 테스트해 본 결과이다.

필요한 데이터만 뽑아서 쓰니까 훨~~씬 깔끔해졌다😉

profile
웹 백엔드 개발자가 되기 위해 열심히 공부를 하자🔥

0개의 댓글