IT
[JSON] Simple Json 오브젝트 생성과 파싱 (Create JSonObject and Parsing)
Dante2k™
2013. 12. 2. 11:03
반응형
오랜만에 글을 씁니다.
이번에는 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^
끝.
반응형