멋사 Backend 81일차 🦁

신재원·2023년 8월 18일

오픈 API

  • 이전 블로그와 비슷한 내용이지만, 오픈 API의 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를 사용할 준비가 되었습니다.

Json 파싱

  • 파싱하는 메소드와 형식은 이전 블로그랑 동일하게 진행합니다.

하지만 문제점이 있습니다.
사진에서 필자가 Key 값이라고 적은 값 이후에 서울 동물 병원 Json 데이터는 [ 괄호가 없는 반면에 경기도 동물병원 Json 데이터는 [ 괄호가 존재하는걸 볼수 있습니다.

  • 서울 동물병원 Json 데이터
  • 경기도 동물병원 Json 데이터

경기도 동물병원 Json 데이터는 Key 값에 접근후 인덱스 번호로도 접근해줘야합니다.
파싱 코드는 아래와 같이 작성해줘야 합니다.

1. JSONParser 객체 생성

 // JSON 파싱
JSONParser parser = new JSONParser();

2. 첫번째로 마주치는 '{' 괄호를 벗겨주는 코드를 작성합니다.

 // json 코드가 {} 로 감싸고 있을경우
JSONObject jsonObject = (JSONObject) parser.parse(jsonResponse.toString());

3. Key 값에 접근합니다.

// Json 키 값에 접근
JSONArray animalHosptlList = (JSONArray) jsonObject.get("Animalhosptl");

4. 이부분이 핵심입니다. 인덱스 번호로 row 로 감싸져 있는 데이터의 값이 필요함으로 1번 인덱스로 접근합니다.

 // 키값에 접근후, 필요한 index를 사용합니다.
Object tempObject = animalHosptlList.get(1);

5. 1번 인덱스에 접근후 Json 데이터를 보면서 어떤 괄호를 더 벗겨서 데이터에 접근해야하는지 파악하여 코드를 작성해주면 됩니다.

// '{' 괄호 벗기기
JSONObject animalHosptl = (JSONObject) tempObject;
// "row" 객체에 접근
JSONArray petHospitalList = (JSONArray) animalHosptl.get("row");

0개의 댓글