출처: Geek The World!!
JSON(JavaScript Object Notation)은 데이터 교환 포맷의 일종으로서 XML에 비해 상당히 경량화된 데이터 교환 포맷이다. Ajax가 인기를 얻자, Ajax를 사용하는 클라이언트측 자바스크립트 모듈과 서로 데이터를 주고 받는 서버간의 데이터 교환 포맷에 대한 관심이 늘어났는데, 기존 XML이 상당히 무겁고 파싱 및 생성하는데 있어 불편함을 토로하는 개발자가 많아졌고 그러한 점을 보완할 수 있는 JSON이 요즘 인기를 얻고 있는 추세이다. 더불어 REST에 대한 관심도 점차 커져가고 있는데, 작년에 잠깐 아마존 웹 서비스를 이용했을 때 듣기로는 아마존 전체 웹 서비스 사용량의 80% 정도가 REST에 의한 것이었다고 한다.
JSON과 더불어 REST에 대해 도움되는 글 : 서울 가는 길은 하나가 아니다.
JSON은 HeadRush Ajax라는 책에서 처음 접하게 되었는데, 아직까진 별로 써볼일이 없다가 근래에 들어서 급! 써야할 일이 생겨, Java에서 JSON 포맷의 문자열을 파싱하는 예제를 작성해 보았다. JSON.simple이라는 말그대로 상당히 심플한 라이브러리를 사용하여 아주 간단한 예제를 돌려보았다. 라이브러리 자체가 상당히 심플해서 매뉴얼이라곤 달랑 텍스트 파일 하나지만, 간단한 예제를 작성하기에는 더할나위 없었다. ^^;
* 라이브러리는 텍스트 파일내에 링크가 포함되어 있으며, 여기에서 다운로드 할 수 있다.
먼저 서버로부터 받아오는 문자열의 포맷이 JSON 포맷인데, 대략 다음과 같은 데이터를 갖고 있다고 치자.
"taglist":
[
{ "logno":"60033506116", "tagName":"권장도서,소설,소식,언론이주목한책,오늘의책,필독서" }
]
}
원 래는 한줄로 주욱 오겠지만, 조금 보기 쉽게 맞췄다. 내용을 보면 가장 바깥의 중괄호({})로 감싸진 부분 안에 "taglist"라는 키와 대괄호([])로 감싸진 부분이 콜론(:)으로 이어져 있음을 알 수 있다. 이 전체가 하나의 JSON Object이며, JSON Object는 키와 값의 쌍으로 이루어져 있다. 따라서 "taglist"는 키가 되고 []로 감싸진 부분은 값이 된다.
[]로 감싸진 부분은 JSON Array인데, Array는 알다시피 순차적인 값의 집합이며 콤마(,)로 구분된다. 그런데 여기에서는 그 안의 값들도 모두 키와 값의 쌍인 JSON Object들로 이루어져 있음을 알 수 있으며, 각각의 JSON Object의 키는 "logno"와 "tagName"이며, 값은 "60033506116", "권장도서,소설,소식,언론이주목한책,오늘의책,필독서"임을 알 수 있다.
예제의 내용은 이렇게 구성되어 있는 JSON 문자열을 파싱하여 tagName의 값을 출력하는 것이다. 코드는 이렇다.
원 래 문자열은 s라는 객체에 저장되어 있고, JSONValue 클래스의 parse() 메소드로 읽어들여 Object 타입으로 리턴했다가 다시 JSONObject 타입으로 캐스팅한다. (한줄 더 줄일 수 있겠군.. ㅎㅎ) JSOObject로 캐스팅된 다음에는 tagName의 값을 얻기 위해서는 먼저 taglist의 값인 JSON 배열에 접근할 필요가 있겠다. 따라서 get(Object) 메소드를 이용하여 JSONArray를 구한 후 다시 배열내의 첫번째 요소(여기에서는 배열의 요소가 하나밖에 없음)을 구하기 위해 get(Int) 메소드를 이용한다.
그 다음은 구해진 JSONObject 내의 JSObject를 구하기 위해 다시 get(Object) 메소드에 인자로 "tagName"이라는 키를 주어 그 값을 가져온다. JSON Object의 값을 출력하는 결과는 아래와 같다.
참고 : http://www.json.org/java/simple.txt
http://blog.naver.com/starmoon/20033703216
'Back-End > Java' 카테고리의 다른 글
[Java] 자리수 맞추기 String.format() (0) | 2012.08.13 |
---|---|
Apache Common유틸로 숫자난수 생성 (0) | 2012.07.18 |
JSON.simple (0) | 2012.05.07 |
Class.forName - 변수로 클래스를 만들때 (0) | 2012.03.06 |
[Log4j] log4j.properties 설정 (0) | 2012.02.28 |