300x250
반응형
API 데이터 살펴보기
한국수출입은행에서 제공하는 환율정보 API를 이용하여 json 파싱 실습을 하자.
인증키를 발급받고, 변수를 입력해서 요청 URL로 들어가보면
위와 같이 JSON 형태로 되어있음을 볼 수 있다.
우선은 이 URL과 연결해서 데이터를 얻어오는 것 부터 한다.
웹상에 있는 json 데이터 받아오기
<!DOCTYPE html>
<meta charset="utf-8">
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.net.*, java.io.*"%>
<html>
<head>
<%
try{
//매개변수 포함하여 api 주소 만들기
String authkey = "(인증키)";
String bDate = "20190802";
String address = "https://www.koreaexim.go.kr/site/program/financial/exchangeJSON?authkey="
+authkey+"&searchdate="+bDate+"&data=AP01";
//객체 생성 및 url 연결
URL url = new URL(address);
URLConnection urlConn = url.openConnection();
//데이터 받아오기
InputStreamReader ir = new InputStreamReader(urlConn.getInputStream());
BufferedReader br = new BufferedReader(ir);
String line;
line = br.readLine();
//출력
out.print(line);
br.close();
ir.close();
} catch(Exception e){
e.printStackTrace();
}
%>
</head>
<body>
</body>
</html>
잘 받아와지는 것을 확인한다.
json-simple 라이브러리 추가
받아온 JSON 데이터를 파싱하기 위해 json-simple 라이브러리를 이용할 것이다.
jar파일을 다운받아 서버에 올린다.
(현재 노트패드로 우분투 서버에 직접 연결중이다. 이클립스로 로컬작업중일 땐 빌드패스로 추가해줘야 한다.)
json 데이터 파싱
<%@ page import="org.json.simple.*"%>
<%@ page import="org.json.simple.parser.JSONParser"%>
json-simple을 이용하기 위해 우선 이 두개를 추가해서 임포트한다.
<body>
<table border=1px cellspacing=0px>
<tr>
<th>통화명 (통화코드)</th>
<th>송금 받으실 때</th>
<th>송금 보내실 때</th>
<th>매매기준율</th>
<th>장부가격</th>
<th>년환가료율</th>
<th>10일환가료율</th>
<th>서울외국환중계<br>매매기준율</th>
<th>서울외국환중계<br>장부가격</th>
</tr>
<%
/***** 받아온 json 데이터 파싱하기 *****/
//파서 객체 만들기
JSONParser parser = new JSONParser();
// json 데이터를 object로 만들기
//JSONObject obj = (JSONObject)parser.parse(line);
// json 데이터를 파싱하여 배열로 추출
JSONArray arr = (JSONArray)parser.parse(line);
//out.print(arr); //배열로 잘 넘어왔나 확인
// 통화별로 {} 묶여있으므로 배열 사이즈(=통화종류)만큼 반복
for(int i=0; i<arr.size(); i++){
// 배열 안에 있는 것도 json 형식이기 때문에 JSONObject로 추출
JSONObject obj = (JSONObject)arr.get(i);
String cur_unit = (String)obj.get("cur_unit"); //통화코드
String cur_nm = (String)obj.get("cur_nm"); //국가/통화명
String ttb = (String)obj.get("ttb"); //송금 받으실때
String tts = (String)obj.get("tts"); //송금 보내실때
String deal_bas_r = (String)obj.get("deal_bas_r"); //매매 기준율
String bkpr = (String)obj.get("bkpr"); //장부가격
String yy_efee_r = (String)obj.get("yy_efee_r"); //년환가료율
String ten_dd_efee_R = (String)obj.get("ten_dd_efee_R"); //10일환가료율
String kftc_deal_bas_r = (String)obj.get("kftc_deal_bas_r"); //서울외국환중계 매매기준율
String kftc_bkpr = (String)obj.get("kftc_bkpr"); //서울외국환중계 장부가격
// 출력
%>
<tr>
<td><%=cur_nm%> (<%=cur_unit%>)</td>
<td><%=ttb%></td>
<td><%=tts%></td>
<td><%=deal_bas_r%></td>
<td><%=bkpr%></td>
<td><%=yy_efee_r%></td>
<td><%=ten_dd_efee_R%></td>
<td><%=kftc_deal_bas_r%></td>
<td><%=kftc_bkpr%></td>
</tr>
<%
}
br.close();
ir.close();
} catch(Exception e){ //위에서 URLConnection 만들때 연 try 닫는것
e.printStackTrace();
}
%>
</body>
보통 JSONObject로 먼저 받아오는 것 같은데,
여기서 사용하는 API는 [로 시작해서 ]로 끝나기 때문에 전체를 하나로 배열로 보는 것 같다.
그래서 바로 JSONArray로 파싱해야 하는 듯하다.
주석처리한 JSONObject objJSONObject obj = (JSONObject)parser.parse(line); 를 실행하면 아래 에러문구가 뜬다.
java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject
json 데이터를 가져와서 각각의 요소를 뽑아내는 것까지 마쳤다.
이제 뽑아낸 데이터를 가지고 원하는 페이지를 만들면 된다.
300x250
반응형
'IT > 웹프로그래밍' 카테고리의 다른 글
java.lang.ClassFormatError; Truncated class file (0) | 2019.08.12 |
---|---|
ajax 사용하여 비동기 데이터 받아오기 (0) | 2019.08.08 |
세션 이용하여 로그인 구현하기, 로그인이 필요한 데이터에 접근하기. (0) | 2019.07.31 |
HttpClient 라이브러리 사용하기 (0) | 2019.07.31 |
xml 기초 2. xml파일 파싱하기 (0) | 2019.07.30 |