반응형
오랜만에 글을 씁니다.
이번에는 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^
끝.
반응형