본문 바로가기

IT

[JSON] Simple Json 오브젝트 생성과 파싱 (Create JSonObject and Parsing)

반응형

 오랜만에 글을 씁니다.


 이번에는 Json 라이브러리중에 Simple Json 라이브러리를 이용하여 JsonObject 를 생성하고 Json 문자열을 생성하여 데이터 전달, 이후 다시 받은 문자열을 JsonObject로 가공하기 전의 데이터로 되돌리는 방법을 알아 봅니다.


 json-simple 프로젝트는 http://code.google.com/p/json-simple/ 에서 진행중입니다. 소스와 컴파일된 라이브러리등을 구할 수 있습니다.


 이번에 json-simple을 사용한 이유는 결제시스템에서 데이터를 LinkedHashMap으로 가공하여 사용하는데 이를 보관하는 용도로 text 타입의 데이터가 필요하였습니다. 하여 데이터 클래스(가변적입니다. 고정적인 데이터가 아니고)를 text로 Serialization 하는 방법으로 Json 을 선택하였고, 그중에 가볍게 사용할 수 있는 무료라이브러리중 Json-Simple을 선택하였습니다.


 저의 주된 관심사였던 LinkedHashMap, 또는 HashMap의 데이터를 JsonObject로 변환하여 text 데이터로 변환하는 방법은 다음과 같습니다.


	// 저장할 데이터
	LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
	map.put("단말기번호", "0102392093");
	map.put("사업자번호", "9983459484");
	map.put("현재일자", "20131128");
	map.put("현재시간", "134000");
	
	// LinkedHashMap의 데이터로 JsonObject 를 생성한다.
	JSONObject jsonObj = new JSONObject(map);
	
	// 보관용도의 text 타입의 Json 데이터를 생성한다.
	final String JsonString = jsonObj.toJSONString();
	// 출력해본다.
	System.out.println("JsonString = ^" + JsonString + "^");
	
	try {
		// 다시 데이터 타입으로 되돌리기 위해서 Json 파서를 이용하여 
		// JsonObject를 생성한다.
		ContainerFactory lhmContainerFactory = new ContainerFactory() {
			@Override
			public Map<String, String> createObjectContainer() {
				return new LinkedHashMap<String, String>();
			}
			@Override
			public List<String> creatArrayContainer() {
				return new LinkedList<String>();
			}
		};
		
		// 파서를 이용하여 데이터로 복원한다.
		Object obj = new JSONParser().parse(JsonString, lhmContainerFactory);
		LinkedHashMap<String, String> parsedMap = (LinkedHashMap<String, String>) obj;

		// 데이터를 출력한다.
		System.out.println("Parsed LinkedHashMap = ^" + parsedMap + "^");
		
		// 원하는 데이터를 선택하여 출력한다.
		System.out.println("사업자번호 = ^" + parsedMap.get("사업자번호") + "^");
	} catch (ParseException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}


 실행결과는 다음과 같다.


JsonString = ^{"사업자번호":"9983459484","단말기번호":"0102392093","현재일자":"20131128","현재시간":"134000"}^
Parsed LinkedHashMap = ^{사업자번호=9983459484, 단말기번호=0102392093, 현재일자=20131128, 현재시간=134000}^
사업자번호 = ^9983459484^


 끝.

반응형