이번에 포스팅해 드릴 내용은 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객체 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 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
POI라이브러리를 이용하여 엑셀파일(xls,xlsx) 에 데이터 넣어서 파일로 만들기 (1) | 2014.10.07 |
---|---|
DTO,VO에 정의되어있는 변수명 및 갯수에 관계없이 변수명과 value값 한방에 가져오기 (0) | 2014.10.07 |
Map객체의 key값을 읽어서 value값 한번에 추출하기 (0) | 2014.10.07 |
JSTL의 c:forTokens을 이용하여 확장자명 찾기 (0) | 2014.10.06 |
ImageIO를 이용하여 자바 썸네일 이미지 생성코드 구현하기 (1) | 2014.10.06 |