티스토리 뷰

공장 (factory)/- Programming..

[Java/JSP] JSON 간단 예제.

공부하는 나부랭이, 무중력고기 2014.01.20 20:30


javax.json-api-1.0.jar


jettison-1.1.jar



   이 두 라이브러리를 활용했다.

   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으로 붙여가면서 하는 사람도 있을 듯. 예전의 나처럼. ㅡㅡ;;;


   이해한다.. 존재 자체도 모르니 필사적으로 찾아보지 않으면 그렇게 되는 거다...


   이제 이런 걸 써먹자.



댓글
  • 예전 무식이 string으로 하면서 만들었던 ...사람 여기있습니다 ... 잘읽었습니다 ^^좋은 글 감사합니다. 2016.11.07 11:51
댓글쓰기 폼
Total
1,421,024
Today
891
Yesterday
946
«   2019/11   »
          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
글 보관함