이번에 포스팅해 드릴 내용은 API방식에서 주로 사용하는

JSON오브젝트를 생성한 후 사용자페이지에서 받아보는 방법

사용자 페이지에서 보낸 문자열로 만들어진 JSON을 OBJECT로 변환하는 코드를 

구현해보도록 할까 합니다.

라이브러리는 JSON SIMPLE이라는 라이브러리를 이용하여 

작업을 해보도록 하겠습니다.


라이브러리 다운로드는 


https://code.google.com/p/json-simple/downloads/list


상단 URL에 접속하여 받도록 하겠습니다.


오늘날짜 기준으로 확인결과 최신버전은 json-simple-1.1.1.jar 파일이네요 ㅎㅎㅎ


이클립스에서 Dynamic Web Project를 생성 후 lib 폴더에 다운받은 라이브러리를 include 해주겠습니다.


제가 세팅은 프로젝트 및 파일의 경로는 다음과 같습니다





코드작성을 위해 생성한 jsonobject.jsp라는 파일에 다음과 같이 코드를 작성하였습니다.


JSON OBJECT를 생성하는 코드


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
//최상단 json객체
JSONObject jsonroot=new JSONObject();
//가상의 list객체 (db에서 조회한 결과라고 가정)
ArrayList<Map<String,Object>> selectlist=new ArrayList<Map<String,Object>>();
Map<String,Object> dbmap=null;
for(int i=0;i<20;i++){
    dbmap=new HashMap<String,Object>();
    dbmap.put("data", "가상의DB데이터"+i);
    selectlist.add(dbmap);
}
//json 배열목록을 담아줄 jsonarray 객체생성
JSONArray jsonList=new JSONArray();
//가상DB목록을 JSON배열목록에 출력하기 위한 임의의 JSON오브젝트
JSONObject jsontmp=null;
//DB에서 조회한 값을 반복문을 이용하여 객체 하나씩 뽑아온다
for(Map<String,Object> selectone : selectlist){
    Set<String> key=selectone.keySet();
    //MAP의 KEY/VALUE를 통하여 JSON임시객체에 담아준후
    for (Iterator<String> iterator=key.iterator();iterator.hasNext();){
        String tmpekey=(String) iterator.next();
        String tmpvalue=(String) selectone.get(tmpekey);
        jsontmp=new JSONObject();
        jsontmp.put(tmpekey, tmpvalue);
    }
    //JSON배열목록에 추가
    jsonList.add(jsontmp);
}
//db목록 json set
jsonroot.put("result",jsonList);
//성공여부
jsonroot.put("success",true);
PrintWriter pw=response.getWriter();
pw.print(jsonroot);
pw.flush();
pw.close();

관련 라이브러리 IMPORT는 생략하도록 하겠습니다!


그럼 한번 실행을 하여서 결과가 어떻게 나오는지 확인해 보도록 하겠습니다.





위와같이 json 형태로 정상적으로 만들어져서 

출력되는 결과를 확인하였습니다.


다음으로는 클라이언트 페이지에서 넘어온 json문자열을 object타입으로 

변환하는 작업을 해보도록 하겠습니다.


json 은 2가지 방법으로 만들어질수가 있습니다.


1.{key:value}의 object형식

2. [{key:value}]의 array형식


이두가지로 구분이 되겠는데 

방법을 나누어서 코드를 작성해보도록 하겠습니다.


JSON문자열을 OBJECT로 생성하는 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//사용자페이지에서 넘겨준 가상의 문자열 json data (request.getparameter을 이용하여 받았다고 가정합니다)
String requestgetparameter="{\"jsonstring1\":\"가상의문자열데이터1\",\"jsonstring2\":\"가상의문자열데이터2\"}";
if(requestgetparameter.substring(0,1).equals("{")){
    //단순 object형식일 경우 JSONValue.parse를 이용해줍니다
    Object jsonobject=JSONValue.parse(requestgetparameter);
    JSONObject jsonobj=(JSONObject)jsonobject;
    System.out.println("[JSON 오브젝트파싱후 각각의 KEY로 VALUE값 출력]");
    System.out.println(jsonobj.get("jsonstring1"));
    System.out.println(jsonobj.get("jsonstring2"));
}
//서버에서 request.getparameter()로 받은 데이터라 가정
String requestgetparameter2="[{\"jsonstring\":\"가상의문자열배열데이터1\"},{\"jsonstring\":\"가상의문자열배열데이터2\"}]";
if(requestgetparameter2.substring(0,1).equals("[")){
    Object jsonarray=JSONValue.parse(requestgetparameter2);
    JSONArray jsonarr=(JSONArray)jsonarray;
    System.out.println("[반복문을 돌려서 JSON 배열 파싱후 각각의 KEY로 VALUE값 출력]");
    for(int i=0;i<jsonarr.size();i++){
        JSONObject jsonobj=(JSONObject)jsonarr.get(i);
        System.out.println(jsonobj.get("jsonstring"));
    }
}

JAVA 서버페이지에서 작업한다는 가정이므로 

콘솔로 결과값들을 출력해보았습니다.






코드들을 응용하셔서 JSON 파싱에 필요하실때 사용하시면 되실거 같습니다 ^^

다음 포스팅때 뵙겠습니다!! ㅎㅎ



by 개발로짜



69123a15d0ab25684d6cabefbfc388a1