JSON이란?
쉽게 자바스크립트로 받은 것을 자바객체로 변환가능하고 그 역으로도 가능하게 해주는 역할을 한다.
http://www.json.org/에 가보면 이 녀석이 뭔지 알 수 있다.
(한국어 http://www.json.org/json-ko.html, 위키, http://ko.wikipedia.org/wiki/JSON)
이제 실제로 적용해보자.
시나리오.
A사이트의 데이터를 B사이트에 뿌려야 한다. 이때 데이터는 어떤 객체의 Array인 상태이다.
이것을 JSON을 이용해서 처리한다고 가정을 하자.
일단 B사이트에서 A사이트로 줄 수 있게 JSON 객체를 이용해서 담아야 할것이다.
담는 예제.
<%@page import="org.json.simple.*"%>
"중략"
protected String checkData( String szFunctionID, KMForum[] arrForum) throw Exception
{
if( arrForum == null ) return "";
JSONArray jsonArray = new JSONArray(); // 객체를 담기위해 JSONArray 선언.
JSONObject jsonObj = null; // 이건 해당 객체를 담기 위해.
DKForum dkForum = nill;
String szName = "";
for(int i=0; i < arrForum.length; i++)
{
dkForum = arrForum[i].getDKForum();
jsonObj = new JSONObject(); // jsonObj을 통해 객체의 값을 하나씩 담기 시작.
jsonObj.put( "Account", dkForum.m_szCreator);
//jsonObj.put( "ApprovalName", URLEncoder.encode ( CDUser.getUserInfoField(dkForum.m_szCreatorInfo, CDUser.FIELD_Name), "EUC-KR")); //한글처리위해 URLEncoder로감싸준다.
jsonObj.put( "SubmitDate", String.valueOf( dkForum.m_tsCreatedAt));
jsonObj.put( "Title", URLEncoder.encode( dkForum.m_szName, "EUC-KR"));
.
.
.
jsonArray.add( jsonObj); // JsonArray 객체에 해당 객체를 담는다.
}
return jsonArray != null ? jsonArray.toStirng() : "";
}
--------------------------------------------------------------------------------
이렇게 담은 것을 B사이트에서는 JSP에 바로 뿌리고..
A사이트에서는 이 데이터를 가져온다.
헌데 다른 사이트이니 크로스도메인 때문에 AJAX를 이용하기는 힘들다.
여기선 URLConnection을 이용해서 값을 가져온다.
//B사이트의 데이터를 A사이트로 가져오기 위해 URLConnection을 이용한다.
import java.net.*;
"중략"
protected String getData( String szModuleKey) throws Exception
{
URL url = new URL( szTargetURL);
// URL 객체 생성 szTargetURL은 http://로 시작하는 것으로 A사이트의 데이터가 부려지는 URL
URLConnection conn = url.openConnection();
conn.setReadTimeout( 3000);
//1.5부터 나온 타임아웃. 3초가 지나면 다시 확인하지 않는다. 이 메소드가 없다면 만약 szTargetURL이 잘못되면 계속 대기하다가 메모리 풀나는 경우가 생길 수 있다.
DataInputStream dis = new DataInputStream( conn.getInputStream());
String szInputLine;
StringBuffer sbResult = new StringBuffer();
// 한글 처리를 위해 URLDecoder 이용.
while (( szInputLine = dis.readLine()) != null)
{
sbResult.append( URLDecoder.decode( szInputLine, "EUC-KR"));
}
dis.close();
return sbResult.toString();
}
-----------------------------------------------------------------------------
이렇게 가져온 데이터에는 JSON 객체로 값이 들어있다.
이 녀석을 다시 뽑아서 해당 객체를 만들어 보자!
//첫째로 일단 받아온 데이터를 이렇게 JSONArray로 넣는다.
JSONArray array = new JSONArray(szResult);
//그후 JSONArray를 받아서 바로 JSONObject로 형변환해서 쓰면 끝이다.
protected DEApproval[] checkData( JSONArray array) throws Exceptin
{
if (array == null) return null;
DEApproval[] arrApproval = new DEApproval[ array.length()];
JSONObject json = null;
for( int i=0; i < array.length(); i++)
{
json = ( JSONObject)array.get(i);
arrApproval[i] = new DEApproval();
arrApproval[i].setAccount( String.valueOf( json.get( "Account")));
arrApproval[i].setTitle( String.valueOf(json.get("Title")));
.
.
.
"중략"
}
return arrApproval;
}
--------------------------------------------------------------------------
json-simple 관련 API는 http://code.google.com/p/json-simple/를 보면 좋다.
'Miscellaneous' 카테고리의 다른 글
CGI.....??? 갑자기 궁금해 져서..... (0) | 2012.03.13 |
---|---|
Runtime에 대한 개인적인 생각... (0) | 2012.01.17 |
FlatForm 三 國 時 代..... (0) | 2012.01.10 |
C언어 간단 정리...!! (0) | 2012.01.04 |
ARM 아키텍처와 RISC (0) | 2012.01.03 |