728x90
반응형
http://zero-gravity.tistory.com/197
이 두 라이브러리를 활용했다.
javax-json-api-1.0.jar 파일의 경우 java 1.7 버전 이상에는 기본적으로 포함되어 있으므로 따로 다운로드 받지 않아도 된다.
jettison 다운로드 경로 → http://jettison.codehaus.org/Download
↓ 데이터를 JSON 형태로 빌드하기.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 |
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; import kr.co.techinmotion.web.IAction; public class JsonBuildAction implements IAction { private boolean redirect = false ; @Override public String process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // key와 value로 구성되어있는 HashMap 생성. Map<STRING, String> m = new HashMap<STRING, String>(); // 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에 뿌리기.
1
2
3
4
5 |
< FORM method = post action = jsonDismantle .ok> < TEXTAREA rows = 5 cols = 100 name = jsonText > ${requestScope.jsonStr } </ TEXTAREA >< BR > < INPUT value=전송 type = submit > </ FORM > |
그럼 위와 같이 나온다.
긁어서 http://jsonlint.com 에서 확인해보면 정확하게 만들어졌음을 알 수 있다.
전송을 클릭해서 다시 이 JSON 형태의 텍스트를 분해해보자.
↓ JSON 형태의 텍스트를 받아서 분해.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 |
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; import kr.co.techinmotion.web.IAction; 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<STRING> locationArray = new ArrayList<STRING>(); 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에 출력하기
1
2
3
4
5
6
7
8 |
이름은? : ${name } < BR > 나이는? : ${age } < BR >< BR > < C:IF test = "${!empty locationArray}" > < C:FOREACH var = "lo" items = "${locationArray}" > 위치는? ---> ${lo} < BR > </ C:FOREACH > </ C:IF > |
출력하면 위와 같이 나온다.
굉장히 간단하다.
이런 게 있는줄도 모르고 무식하게 일일히 String으로 붙여가면서 하는 사람도 있을 듯. 예전의 나처럼. ㅡㅡ;;;
이해한다.. 존재 자체도 모르니 필사적으로 찾아보지 않으면 그렇게 되는 거다...
이제 이런 걸 써먹자.
728x90
반응형
'Web Programming > java-jsp' 카테고리의 다른 글
jsp 한글깨짐!!!!!!!!!!!!!!!! (0) | 2014.02.17 |
---|---|
PORT 접근 TEST[telnet ip port] (0) | 2014.02.17 |
<%! %> (0) | 2014.02.17 |
[Java] 객체 사용후 null 할당! 해야하나 말아야 하나? (0) | 2014.02.17 |
오라클 nvl, decode (0) | 2014.02.03 |