티스토리 뷰
이 두 라이브러리를 활용했다.
javax-json-api-1.0.jar 파일의 경우 java 1.7 버전 이상에는 기본적으로 포함되어 있으므로 따로 다운로드 받지 않아도 된다.
jettison 다운로드 경로 → http://jettison.codehaus.org/Download
↓ 데이터를 JSON 형태로 빌드하기.
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.json.Json;
import javax.json.JsonArrayBuilder;
import javax.json.JsonBuilderFactory;
import javax.json.JsonObjectBuilder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class JsonBuildAction implements IAction {
private boolean redirect = false;
@Override
public String process(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// key와 value로 구성되어있는 HashMap 생성.
Map m = new HashMap();
// Map 타입의 m을 BuilderFactory에 넣어준다. (JsonBuilderFactory는 Json을 만들기 위한 뼈대라고 보면 됨)
JsonBuilderFactory factory = Json.createBuilderFactory(m);
// createObjectBuilder는 하나씩 넣을 때, createArrayBuilder는 배열로 넣을 때.
JsonObjectBuilder ob_1 = factory.createObjectBuilder();
JsonObjectBuilder ob_2 = factory.createObjectBuilder();
JsonObjectBuilder ob_3 = factory.createObjectBuilder();
JsonArrayBuilder ab = factory.createArrayBuilder();
// 첫번째 JsonObjectBuilder에 이름과 나이를 추가.
ob_1.add("이름", "홍길동");
ob_1.add("나이", "모름");
// 두번째 JsonObjectBuilder에 홍길동의 위치(위도와 경로)를 추가.
ob_2.add("위도", "36.3713874817");
ob_2.add("경도", "127.645332336");
// 세번째 JsonObjectBuilder에 홍길동의 위치(위도와 경로)를 추가.
ob_3.add("위도", "50.153273512");
ob_3.add("경도", "110.99976542");
// 두번째와 세번째 JsonObjectBuilder를 ArrayBuilder에 넣어준다.
ab.add(ob_2);
ab.add(ob_3);
// 첫번째 JsonObjectBuilder에 ArrayBuilder를 추가.
ob_1.add("위치", ab);
// 최종적으로 ob_1 JsonObjectBuilder를 build.
String jsonStr = ob_1.build().toString();
request.setAttribute("jsonStr", jsonStr);
return "/WEB-INF/jsonTest.jsp";
}
@Override
public boolean isRedirect() {
return redirect;
}
}
↓ 빌드한 JSON을 텍스트로 JSP에 뿌리기.
그럼 위와 같이 나온다.
긁어서 http://jsonlint.com 에서 확인해보면 정확하게 만들어졌음을 알 수 있다.
전송을 클릭해서 다시 이 JSON 형태의 텍스트를 분해해보자.
↓ JSON 형태의 텍스트를 받아서 분해.
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
public class JsonDismantleAction implements IAction {
private boolean redirect = false;
@Override
public String process(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String jsonText = request.getParameter("jsonText");
String name = null;
String age = null;
ArrayList locationArray = new ArrayList();
try {
JSONObject jo = new JSONObject(jsonText);
name = jo.getString("이름");
age = jo.getString("나이");
JSONArray array = jo.getJSONArray("위치");
for(int i=0; i < array.length(); i++){
JSONObject jsonObject = array.getJSONObject(i);
String lat = jsonObject.getString("위도");
String lon = jsonObject.getString("경도");
locationArray.add(i, "위도 : " + lat + ", 경도 : " + lon);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setAttribute("name", name);
request.setAttribute("age", age);
request.setAttribute("locationArray", locationArray);
return "/WEB-INF/jsonResult.jsp";
}
@Override
public boolean isRedirect() {
return redirect;
}
}
↓ 분해한 데이터를 JSP에 출력하기
이름은? : ${name }
나이는? : ${age }
위치는? ---> ${lo}
출력하면 위와 같이 나온다.
굉장히 간단하다.
이런 게 있는줄도 모르고 무식하게 일일히 String으로 붙여가면서 하는 사람도 있을 듯. 예전의 나처럼. ㅡㅡ;;;
이해한다.. 존재 자체도 모르니 필사적으로 찾아보지 않으면 그렇게 되는 거다...
이제 이런 걸 써먹자.
'공장 (factory) > - Programming..' 카테고리의 다른 글
| [Java] keystore/truststore 생성, SSL 사용 예. (7) | 2014.01.29 |
|---|---|
| [Java] Mybatis 설정하기. (0) | 2014.01.24 |
| [JSP] Put 방식의 서버 측 코딩 예 (doPut) (0) | 2013.12.11 |
| [HDFS/Java] HDFS를 Java에서 사용하기 (0) | 2013.11.06 |
| [JSP] RSA를 이용한 ID/PW 암호화 (2) | 2013.11.04 |
댓글
javax.json-api-1.0.jar