본문 바로가기

Miscellaneous

JSON을 이용해 보자!


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