본문 바로가기
Skill Stacks/Java

[Java] Open API와 JSON 활용하기

by JayAlex07 2023. 8. 7.

[Java] Open API와 JSON 활용하기

서울 공공 WIFI Open API 가져오기

https://data.seoul.go.kr/dataList/OA-20883/S/1/datasetView.do

  • 위 주소를 통해서 API를 사용하기 위한 key와 사용법에 대해 읽는다
  • Open API 사용하기 PDF 파일에는 프로그래밍 언어마다 API를 사용하는 코드가 다 나와 있어서, 복사 붙여 넣기만 하면 된다

JSON 활용하기

File -> Project Stucture -> Dependencies -> + -> 라이브러리 선택

코드

package test;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.mortbay.util.ajax.JSON;

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 test {
    public static void main(String[] args) throws IOException, ParseException {
        StringBuilder urlBuilder = new StringBuilder("http://openapi.seoul.go.kr:8088");
        StringBuilder sb = new StringBuilder();
        JSONObject result = null;


        /*URL*/
        urlBuilder.append("/" + URLEncoder.encode(인증키,"UTF-8") ); 
        /*인증키 (sample사용시에는 호출시 제한됩니다.)*/

        urlBuilder.append("/" + URLEncoder.encode("json","UTF-8") ); 
        /*요청파일타입 (xml,xmlf,xls,json) */

        urlBuilder.append("/" + URLEncoder.encode("TbPublicWifiInfo","UTF-8"));

        /*서비스명 (대소문자 구분 필수입니다.)*/
        urlBuilder.append("/" + URLEncoder.encode("1","UTF-8")); 
        /*요청시작위치 (sample인증키 사용시 5이내 숫자)*/

        urlBuilder.append("/" + URLEncoder.encode("5","UTF-8"));
        /*요청종료위치(sample인증키 사용시 5이상 숫자 선택 안 됨)*/

        // 상위 5개는 필수적으로 순서바꾸지 않고 호출해야 합니다.
        // 서비스별 추가 요청 인자이며 자세한 내용은 각 서비스별 '요청인자'부분에 자세히 나와 있습니다.
        // urlBuilder.append("/" + URLEncoder.encode("20220301","UTF-8")); /* 서비스별 추가 요청인자들*/

        try {
            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;

            // 서비스코드가 정상이면 200~300사이의 숫자가 나옵니다.
            if (conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
                rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            } else {
                rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
            }

            String line;
            while ((line = rd.readLine()) != null) {
                sb.append(line);
            }
            rd.close();
            conn.disconnect();

        } catch (Exception e) {
            e.printStackTrace();
        }


        result = (JSONObject) new JSONParser().parse(sb.toString());

        JSONObject data = (JSONObject) result.get("TbPublicWifiInfo");

        JSONArray rowData = (JSONArray) data.get("row");


        for (int i = 0; i < rowData.size(); i ++) System.out.println(rowData.get(i));
    }
}

Json은 HashMap과 비슷하고, key와 value가 있다

  • 그래서 .get() 을 통해서 key를 통해 value를 반환한다
JSONObject : Json의 Object를 가지고 온다 (순회가 불가능하다)
JSONArray : Json을 배열 형태로 가지고 온다 (순회가 가능하다)

'Skill Stacks > Java' 카테고리의 다른 글

[TIL] Java (정렬)  (0) 2023.06.28
[TIL] Java (진수 변환)  (0) 2023.06.24
[TIL] Java (Split, Join)  (0) 2023.06.23
[TIL] Java (Regex)  (0) 2023.06.12
[TIL] Java (Scanner)  (0) 2023.06.11