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

+ Recent posts