상세 컨텐츠

본문 제목

공공데이터 포털 REST API - 결과값 JSON to Array

Spring/JAVA

by Chan.94 2022. 7. 14. 08:20

본문

반응형

공공데이터 포털에는 수많은 REST API를 제공한다.

REST API에 대한 공부가 부족한 사람들은 REST API 개념 포스팅을 참조 바란다.


1) 공공데이터 포털

     데이터 찾기 - 데이터 목록

2) 상세조건

    서비스 유형 - REST

    확장자 - JSON

3) 공공데이터 선택 - 활용신청

 

이제 아래의 상세 기능 탭에서 요청변수(Request Parameter)출력결과(Response Element)를 보고 사용하면 된다.

언어별 샘플 코드도 제공해준다.

 

샘플코드(JAVA)

/* Java 1.8 샘플 코드 */


import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.io.BufferedReader;
import java.io.IOException;

public class ApiExplorer {
    public static void main(String[] args) throws IOException {
        StringBuilder urlBuilder = new StringBuilder("https://data.myhome.go.kr:443/rentalHouseList"); /*URL*/
        urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=서비스키"); /*Service Key*/
        urlBuilder.append("&" + URLEncoder.encode("brtcCode","UTF-8") + "=" + URLEncoder.encode("11", "UTF-8")); /*광역시도 코드*/
        urlBuilder.append("&" + URLEncoder.encode("signguCode","UTF-8") + "=" + URLEncoder.encode("140", "UTF-8")); /*시군구 코드*/
        urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("10", "UTF-8")); /*조회될 목록의 페이지당 데이터 개수 (기본값:10)*/
        urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("1", "UTF-8")); /*조회될 페이지의 번호 (기본값:1)*/
        URL url = new URL(urlBuilder.toString());
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Content-type", "application/json");
        System.out.println("Response code: " + conn.getResponseCode());
        BufferedReader rd;
        if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
            rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        } else {
            rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
        }
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = rd.readLine()) != null) {
            sb.append(line);
        }
        rd.close();
        conn.disconnect();
        System.out.println(sb.toString());
    }
}

서비스 키는 활용신청 후 제공받은 값을 사용하면 된다.

요청변수(Request Parameter)의 값은 참조 문서를 확인하자.

 

샘플코드 결과

Response code: 200
{"code":"000"
,"hsmpList":[
	    {"numOfRows":"10"
            	,"pageNo":1
            	,"totalCount":98
            	,"hsmpSn":31351688
            	,"insttNm":"LH서울"
            	,"brtcCode":"11"
            	,"brtcNm":"서울특별시"
            	,"signguCode":"140"
            	,"signguNm":"중구"
            	,"hsmpNm":"서울특별시 중구"
            	,"rnAdres":"서울특별시 중구 동호로33길 15"
            	,"pnu":"1114015400101450001"
            	,"competDe":{}
            	,"hshldCo":49
            	,"suplyTyNm":"매입임대"
            	,"styleNm":"15"
            	,"suplyPrvuseAr":15.79
            	,"suplyCmnuseAr":18.01
            	,"houseTyNm":{}
            	,"heatMthdDetailNm":{}
            	,"buldStleNm":{}
            	,"elvtrInstlAtNm":{}
            	,"parkngCo":0
            	,"bassRentGtn":2000000
            	,"bassMtRntchrg":396760
            	,"bassCnvrsGtnLmt":0
            },
            {
            	"numOfRows":"10"
            	,"pageNo":1
            	,"totalCount":98
            	,"hsmpSn":31351688
            	,"insttNm":"LH서울"
                ,"brtcCode":"11"
                ,"brtcNm":"서울특별시"
                ,"signguCode":"140"
                ,"signguNm":"중구"
                ,"hsmpNm":"서울특별시 중구"
                ,"rnAdres":"서울특별시 중구 동호로33길 15"
                ,"pnu":"1114015400101450001"
                ,"competDe":{}
                ,"hshldCo":49
                ,"suplyTyNm":"매입임대"
                ,"styleNm":"15"
                ,"suplyPrvuseAr":15.79
                ,"suplyCmnuseAr":18.57
                ,"houseTyNm":{}
                ,"heatMthdDetailNm":{}
                ,"buldStleNm":{}
                ,"elvtrInstlAtNm":{}
                ,"parkngCo":0
                ,"bassRentGtn":2000000
                ,"bassMtRntchrg":399520
                ,"bassCnvrsGtnLmt":0
            },
            ...
            ]
}

JSON to Array

/**
* REST API return 데이터 추출
*/
JSONParser jsonParser = new JSONParser();

//JSON데이터를 넣어 JSON Object 로 만들어 준다.
JSONObject jsonObject = (JSONObject)jsonParser.parse(sb.toString());
        
//배열 추출
JSONArray array = (JSONArray) jsonObject.get("hsmpList");
 for(int i=0; i<array.size(); i++){
        	 
    System.out.println("hsmp_"+i+" ===========================================");
             
    //배열 안에 있는것도 JSON형식 이기 때문에 JSON Object 로 추출
    JSONObject object = (JSONObject) array.get(i);
             
    //JSON name으로 추출
    System.out.println("insttNm ==> "+object.get("insttNm"));
    System.out.println("brtcNm ==> "+object.get("brtcNm"));
    System.out.println("signguNm ==> "+object.get("signguNm"));
    System.out.println("rnAdres ==> "+object.get("rnAdres"));
    System.out.println("suplyTyNm ==> "+object.get("suplyTyNm"));
    System.out.println("");

}

실행결과

 

hsmp_0 ===========================================
insttNm ==> LH서울
brtcNm ==> 서울특별시
signguNm ==> 중구
rnAdres ==> 서울특별시 중구 동호로33길 15
suplyTyNm ==> 매입임대

hsmp_1 ===========================================
insttNm ==> LH서울
brtcNm ==> 서울특별시
signguNm ==> 중구
rnAdres ==> 서울특별시 중구 동호로33길 15
suplyTyNm ==> 매입임대

hsmp_2 ===========================================
insttNm ==> LH서울
brtcNm ==> 서울특별시
signguNm ==> 중구
rnAdres ==> 서울특별시 중구 퇴계로71길 36
suplyTyNm ==> 매입임대

hsmp_3 ===========================================
insttNm ==> LH서울
brtcNm ==> 서울특별시
signguNm ==> 중구
rnAdres ==> 서울특별시 중구 마른내로 106
suplyTyNm ==> 매입임대

hsmp_4 ===========================================
insttNm ==> LH서울
brtcNm ==> 서울특별시
signguNm ==> 중구
rnAdres ==> 서울특별시 중구 마른내로 106
suplyTyNm ==> 매입임대

hsmp_5 ===========================================
insttNm ==> LH서울
brtcNm ==> 서울특별시
signguNm ==> 중구
rnAdres ==> 서울특별시 중구 마른내로 106
suplyTyNm ==> 매입임대

hsmp_6 ===========================================
insttNm ==> LH서울
brtcNm ==> 서울특별시
signguNm ==> 중구
rnAdres ==> 서울특별시 중구 마른내로 106
suplyTyNm ==> 매입임대

hsmp_7 ===========================================
insttNm ==> LH서울
brtcNm ==> 서울특별시
signguNm ==> 중구
rnAdres ==> 서울특별시 중구 마른내로 106
suplyTyNm ==> 매입임대

hsmp_8 ===========================================
insttNm ==> LH서울
brtcNm ==> 서울특별시
signguNm ==> 중구
rnAdres ==> 서울특별시 중구 마른내로 106
suplyTyNm ==> 매입임대

hsmp_9 ===========================================
insttNm ==> LH서울
brtcNm ==> 서울특별시
signguNm ==> 중구
rnAdres ==> 서울특별시 중구 마른내로 106
suplyTyNm ==> 매입임대

 

 

import시 아래의 라이브러리를 사용해야한다.

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

dependency

<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

 

반응형

'Spring > JAVA' 카테고리의 다른 글

[JAVA] SortedMap - TreeMap 사용법  (0) 2022.07.18
[JAVA] Set 사용법  (0) 2022.07.15
Spring 제공 유틸성 클래스 (StringUtils, BeanUtils)  (0) 2022.07.12
[JAVA] - 람다식(Lambda Expressions)  (0) 2022.07.07
Enum 메소드 및 활용  (0) 2022.06.21

관련글 더보기

댓글 영역

>