Json 형식이 달라 파싱하는데 어려움을 겪어 기록으로 남기고자 합니다.(이전 블로그는 서울 데이터 포털) 이번 게시글은 경기도 데이터 포털의 경기도 동물병원 현황 오픈 API를 파싱하였습니다.
경기도 동물병원 현황 데이터 포털 에 접속하여 인증키를 신청하여 인증키를 발급받습니다.
처음 애를 먹었던 상황이 요청 주소에 기본인자를 포함시켜 줘야되는데 URL 양식이 나와있지 않아 어려움을 느꼈습니다.
https://openapi.gg.go.kr/Animalhosptl?KEY=발급된 인증키&Type=타입형식&pIndex=시작위치&pSize=출력할 사이즈
위와 같은 URL 형식으로 작성하면됩니다. Type 에서는 Json 형식, Xml 형식 사용자 필요에 따라 작성합니다.
올바른 형식으로 작성한
URL주소를 입력하게 되면 알아보기가 힘든Json형식의 데이터가 출력되게됩니다.
이렇게 알아보기가 힘든Json형식의 데이터를 https://jsonlint.com/ 주소에 들어가 빈 공백에 알아보기 힘든Json데이터를 입력한후, Validate Json 버튼을 누르게 되면
이와 같이Json데이터가 정렬 되어 보기좋게 출력되게 됩니다.
🟡 이렇게 하면 오픈 API를 사용할 준비가 되었습니다.
하지만 문제점이 있습니다.
사진에서 필자가 Key 값이라고 적은 값 이후에 서울 동물 병원 Json 데이터는 [ 괄호가 없는 반면에 경기도 동물병원 Json 데이터는 [ 괄호가 존재하는걸 볼수 있습니다.
- 서울 동물병원
Json데이터
- 경기도 동물병원
Json데이터
경기도 동물병원 Json 데이터는 Key 값에 접근후 인덱스 번호로도 접근해줘야합니다.
파싱 코드는 아래와 같이 작성해줘야 합니다.
// JSON 파싱
JSONParser parser = new JSONParser();
// json 코드가 {} 로 감싸고 있을경우
JSONObject jsonObject = (JSONObject) parser.parse(jsonResponse.toString());
// Json 키 값에 접근
JSONArray animalHosptlList = (JSONArray) jsonObject.get("Animalhosptl");
// 키값에 접근후, 필요한 index를 사용합니다.
Object tempObject = animalHosptlList.get(1);
// '{' 괄호 벗기기
JSONObject animalHosptl = (JSONObject) tempObject;
// "row" 객체에 접근
JSONArray petHospitalList = (JSONArray) animalHosptl.get("row");