메신저의새로운혁신 채팅로봇 챗봇 (Chatbot) 입문하기 소 이 메 속 : 시엠아이코리아 름 : 임채문 일 : soulgx@naver.com 1
목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공데이터연동실습
JSON?
JSON JSON (JavaScript Object Notation) 은경량의 DATA- 교환형식이다. 이형식은사람이읽고쓰기에용이하며, 기계가분석하고생성함에도용이하다 JSON 은완벽하게언어로부터독립적이지만 C, C++, C#, Java, JavaScript, Python 그외다수의프로그래머들에게친숙한관습을사용하는텍스트형식이다. 이러한속성들이 JSON 을이상적인 DATA- 교환언어로만들고있다. object 는 name/value 쌍들의비순서화된 SET 이다. object 는 { ( 좌중괄호 ) 로시작하고 ( 우중괄호 ) 로끝내어표현한다. 각 name 뒤에 : (colon) 을붙이고, (comma) 로 name/value 쌍들간을구분한다. array 은값들의순서화된 collection 이다. array 는 [ ( 좌대괄호 ) 로시작해서 ] ( 우대괄호 ) 로끝내어표현한다., (comma) 로 array 의값들을구분한다.
JSON
JSONObject public class JsonEx { public static void main(string[] args) { HashMap map = new HashMap(); map.put("message", " 안녕하세요 "); map.put("count", 1); System.out.println(map.toString()); JSONObject obj = new JSONObject(); obj.put("message", " 안녕하세요 "); obj.put("count", 1); System.out.println(obj.toString()); public class JsonEx { public static void main(string[] args) { HashMap map = new HashMap(); map.put("message", " 안녕하세요 "); map.put("count", 1); map.remove( count ); System.out.println(map.toString()); JSONObject obj = new JSONObject(); obj.put("message", " 안녕하세요 "); obj.put("count", 1); obj.remove( count ); System.out.println(obj.toString());
JSONObject public class JsonEx { public static void main(string[] args) { HashMap map = new HashMap(); map.put("message", " 안녕하세요 "); map.put("count", 1); map.remove("count"); map.put("message", " 안녕 "); System.out.println(map.toString()); JSONObject obj = new JSONObject(); obj.put("message", " 안녕하세요 "); obj.put("count", 1); obj.remove("count"); obj.put("message", " 안녕 "); System.out.println(obj.toString()); public class JsonEx { public static void main(string[] args) { HashMap map = new HashMap(); map.put("message", " 안녕하세요 "); map.put("count", 1); Iterator mapi = map.keyset().iterator(); while (mapi.hasnext()) { System.out.println(mapI.next()); JSONObject obj = new JSONObject(); obj.put("message", " 안녕하세요 "); obj.put("count", 1); Iterator obji = obj.keyset().iterator(); while (obji.hasnext()) { System.out.println(objI.next());
JSONObject public class JsonEx { public static void main(string[] args) { HashMap map = new HashMap(); map.put("message", " 안녕하세요 "); map.put("count", 1); System.out.println(map.get("message")); System.out.println("-----------"); JSONObject obj = new JSONObject(); obj.put("message", " 안녕하세요 "); obj.put("count", 1); System.out.println(obj.get("count")); JSONObject 를활용하여아래와같이출력되는문장을작성해주세요.
JSONObject 정답 public class JsonEx { public static void main(string[] args) { JSONObject obj = new JSONObject(); obj.put("type", "text"); JSONObject msg = new JSONObject(); msg.put("content", " 안녕하세요 "); obj.put("message", msg); ()); System.out.println(obj.toString());
public class ArrayEx { public class ArrayEx { JSONArray public static void main(string[] args) { ArrayList list = new ArrayList(); list.add(" 가나다 "); list.add(1); list.add(" 가나다 "); System.out.println(list.toString()); JSONArray array = new JSONArray(); array.put(" 가나다 "); array.put(1); array.put(" 가나다 "); System.out.println(array.toString()); public static void main(string[] args) { ArrayList list = new ArrayList(); list.add(" 가나다 "); list.add(1); list.add(" 가나다 "); list.remove(2); System.out.println(list.toString()); JSONArray array = new JSONArray(); array.put(" 가나다 "); array.put(1); array.put(" 가나다 "); array.remove(2); System.out.println(array.toString());
JSONArray public class ArrayEx { public static void main(string[] args) { ArrayList list = new ArrayList(); list.add(" 가나다 "); list.add(1); list.add(" 가나다 "); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); System.out.println("-----------"); JSONArray array = new JSONArray(); array.put(" 가나다 "); array.put(1); array.put(" 가나다 "); for (int i = 0; i < array.length(); i++) { System.out.println(array.get(i)); JSONObject 및 JSONArray 를활용하여아래와같이출력되는문장을작성해주세요.
JSONArray 정답 public class ArrayEx { public static void main(string[] args) { JSONObject obj = new JSONObject(); obj.put("code", "SUCC"); JSONObject rowdata = new JSONObject(); rowdata.put("data1", " 안녕하세요 "); rowdata.put("data2", " 시엠아이아카데미 "); rowdata.put("data3", " 반갑습니다 "); JSONArray row = new JSONArray(); row.put(rowdata); obj.put("row", row); System.out.println(obj.toString());
서울시공공데이터 API 살펴보기
요청인자살펴보기 API Address : http://data.seoul.go.kr/openinf/openapiview.jsp?infid=oa-12252 http://openapi.seoul.go.kr:8088/key/type/service/start_index/end_index/use_mon/line_num/sub_sta_nm http://openapi.seoul.go.kr:8088/744d615a52736f7534394a64775844/json/cardsubwaytime/1/5/201601/5 호선 / 김포공항
Result Code 살펴보기
출력값살펴보기..
출력값살펴보기 { "CardSubwayTime": { "list_total_count": 1, "RESULT": { "CODE": "INFO-000, "MESSAGE": " 정상처리되었습니다 ", "row": [ { "USE_MON": "201601, "LINE_NUM": "5호선", "SUB_STA_NM": " 김포공항 ", "FOUR_RIDE_NUM": 2.0, "FOUR_ALIGHT_NUM": 0.0, "FIVE_RIDE_NUM": 424.0, "FIVE_ALIGHT_NUM": 2039.0, "SIX_RIDE_NUM": 1829.0, "SIX_ALIGHT_NUM": 6952.0, "SEVEN_RIDE_NUM": 5508.0, "SEVEN_ALIGHT_NUM": 13368.0, "EIGHT_RIDE_NUM": 7220.0, "EIGHT_ALIGHT_NUM": 14183.0, "NINE_RIDE_NUM": 7224.0, "NINE_ALIGHT_NUM": 11874.0, "TEN_RIDE_NUM": 5871.0, "TEN_ALIGHT_NUM": 10955.0, "ELEVEN_RIDE_NUM": 8543.0, "ELEVEN_ALIGHT_NUM": 13339.0, "TWELVE_RIDE_NUM": 10385.0, "TWELVE_ALIGHT_NUM": 14501.0, "THIRTEEN_RIDE_NUM": 12137.0, "THIRTEEN_ALIGHT_NUM": 15412.0, "FOURTEEN_RIDE_NUM": 13583.0, "FOURTEEN_ALIGHT_NUM": 15807.0, "FIFTEEN_RIDE_NUM": 16540.0, "FIFTEEN_ALIGHT_NUM": 14553.0, "SIXTEEN_RIDE_NUM": 17284.0, "SIXTEEN_ALIGHT_NUM": 13875.0, "SEVENTEEN_RIDE_NUM": 19261.0, "SEVENTEEN_ALIGHT_NUM": 14616.0, "EIGHTEEN_RIDE_NUM": 25332.0, "EIGHTEEN_ALIGHT_NUM": 14499.0, "NINETEEN_RIDE_NUM": 20857.0, "NINETEEN_ALIGHT_NUM": 10527.0, "TWENTY_RIDE_NUM": 17511.0, "TWENTY_ALIGHT_NUM": 5139.0, "TWENTY_ONE_RIDE_NUM": 13897.0, "TWENTY_ONE_ALIGHT_NUM": 2925.0, "TWENTY_TWO_RIDE_NUM": 14336.0, "TWENTY_TWO_ALIGHT_NUM": 1982.0, "TWENTY_THREE_RIDE_NUM": 5653.0, "TWENTY_THREE_ALIGHT_NUM": 900.0, "MIDNIGHT_RIDE_NUM": 423.0, "MIDNIGHT_ALIGHT_NUM": 349.0, "ONE_RIDE_NUM": 0.0, "ONE_ALIGHT_NUM": 1.0, "TWO_RIDE_NUM": 0.0, "TWO_ALIGHT_NUM": 0.0, "THREE_RIDE_NUM": 0.0, "THREE_ALIGHT_NUM": 0.0, "WORK_DT": "20160208" ] http://jsonviewer.stack.hu http://openapi.seoul.go.kr:8088/744d615a52736f7534394a64775844/json/cardsubwaytime/1/5/201601/5호선 / 김포공항
HttpClient
HttpHelper 클래스작성 public class HttpHelper { public InputStream getwebdata(string url) { // 접속대기에대한제한시간 --> 밀리세컨드단위 int timeout = 30000; // 접속을하기위한기본환경설정객체 HttpParams params = new BasicHttpParams(); // 프로토콜버전설정 params.setparameter(coreprotocolpnames.protocol_version, HttpVersion.HTTP_1_1); // 요청제한시간 HttpConnectionParams.setConnectionTimeout(params, timeout); // 응답제한시간 HttpConnectionParams.setSoTimeout(params, timeout); // 통신에사용할인코딩값설정 HttpProtocolParams.setContentCharset(params, "UTF-8"); // 접속기능을하는통신객체생성 HttpClient client = new DefaultHttpClient(params); // 응답결과가저장될객체 InputStream is = null; // 통신에필요한요청정보설정 --> URL 을주소표시줄에입력하기 HttpGet httpget = new HttpGet(url);..
HttpHelper 클래스작성.. try { // 요청을보낸후, 응답받기 HttpResponse response = client.execute(httpget); // 웹서버의응답결과코드받기 int resultcode = response.getstatusline().getstatuscode(); // 서버응답이정상일경우에만처리 if (resultcode == HttpURLConnection.HTTP_OK) { // 수신된응답에서실데이터추출 BufferedHttpEntity buffer = new BufferedHttpEntity(response.getEntity()); // 추출한데이터를 InputStream으로변환 is = buffer.getcontent(); catch (IOException e) { e.printstacktrace(); finally { // 통신해제 if (client!= null) client.getconnectionmanager().shutdown(); // 통신결과리턴 return is;
JsonParser 클래스작성 public class JsonParser { public JSONObject getjsonobject(inputstream is) { // 결과객체 JSONObject json = null; // 문자형읽는 BufferedReader 객체 BufferedReader reader = null; // 임시변수 String line = null; // BufferedReader 에서읽은내용을저장하는 StringBuffer 객체생성 StringBuilder sb = new StringBuilder(); try { // BufferedReader 객체생성 reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); // 반복문을통해 BufferedReader 에서내용끝까지읽기 while ((line = reader.readline())!= null) { // 읽어들인내용을 StringBuffer 에추가 sb.append(line +"\n"); // 결과객체생성 json = new JSONObject(sb.toString()); catch(exception e) { e.printstacktrace(); // 자원반납 finally { try { if (reader!= null) reader.close(); if (is!= null) is.close(); catch (Exception e) { e.printstacktrace(); return json;
공공데이터 연동실습
공공데이터연동실습 public class DataTestMain { public static void main(string[] args) throws UnsupportedEncodingException { HttpHelper http = new HttpHelper(); StringBuffer url = new StringBuffer(); url.append("http://openapi.seoul.go.kr:8088/744d615a52736f7534394a64775844/json/cardsubwaytime/1/5"); String[] param = {"201601", "5 호선 ", " 김포공항 "; for (int i = 0; i < param.length; i++) { url.append("/"+urlencoder.encode(param[i], "UTF-8")); InputStream is = http.getwebdata(url.tostring()); if (is == null) { System.out.println(" 공공데이터조회도중오류가발생하였습니다."); return ; JsonParser jp = new JsonParser(); JSONObject obj = jp.getjsonobject(is); JSONObject cardsubwaytime = (JSONObject) obj.get("cardsubwaytime"); if (cardsubwaytime.getjsonobject("result").get("code").equals("info-000")) { int count = cardsubwaytime.getjsonarray("row").getjsonobject(0).getint("eight_alight_num"); System.out.println("08 시 -09 시하차인원 : " + count); else if (cardsubwaytime.getjsonobject("result").get("code").equals("info-200")) { System.out.println(" 조회된데이터가없습니다."); else { System.out.println(" 오류가발생하였습니다.");
감사합니다