지금 제가 하고 있는 프로젝트에서는 데이터를 넘길거나 받을때 JSON을 사용하고 있습니다.
약간의 제약이 있긴 하지만 일단 가볍고 쉽기때문에 선택했죠.
요 JSON을 자바스크립트에서 파싱해서 사용하기는 참 쉽습니다.
무식하게 eval() 함수를 사용해도 좋고 아니면 prototype.js나 mootool.js 와 같은 자바스크립트 프레임워크를 사용한다면 거기서 지원하는 함수를 사용하면 쉽고 깔끔합니다.
문제는 자바에서 파싱하는 문제인데 요것땜시 거의 두시간이나 헤맸습니다.
http://www.json.org 에 들어가보시면 많은 JSON 툴들을 보실수 있습니다.
자바스크립트 툴은 여기서 제공하는것보다는 위에서 설명한 프레임워크에서 제공하는 툴을 사용하는게 더 나은듯 싶습니다.
요렇게 많군요
Java 에서 많이 사용하는게 조~기 보이는 Json-lib 하고(http://json-lib.sourceforge.net/)
org.json.simple(http://www.json.org/java/simple.txt, 다운로드: http://www.JSON.org/java/json_simple.zip ) 입니다. 대부분 두가지를 많이 쓰더군요.
Json-lib 의 경우 정말 많은 기능을 제공합니다. 그만큼 복잡하긴 하지만 이건 될듯해 라고 생각하고 해보면 진짜로 된다는... 신기하더군요.
반면에 org.json.simple은 단순하고 사용자가 자주 쓰는 기능 위주로 되있습니다.
어차피 대부분의 경우JSONObject 객체와 JSONArray 이외의 클래스는 사용하지 않기때문에 간단하게 사용하려면 아래의 simple을 사용하면 되겠습니다.
차이는 있습니다.
Map testMap = new HashMap();
testMap.put("k1" , "v1");
JSONObject jo = new JSONObject();
jo.put("a0", "b0");
jo.put("a1", testMap);
이 결과를 수행하면 org.json.simple은
{"a0":"b0", "a1":{"k1=v1"}} 이렇게 됩니다.
Map으로 넣을경우 제대로 변환이 안된걸 알수 있습니다.
반면 Json-lib 은 {"a0":"b0", "a1":{"k1":"v1"}} 으로 나옵니다.
참고로 툴마다 객체명이나 메소드 명이 다르므로 꼭 확인 하고 쓰는 센스!!!
위에서 javascript에서 파싱하는 방법은... 이야기 안했지만 찾아보면 더럽게 많이 나옵니다.
근데 java에서 파싱하는 내용은 찾기가 어렵더군요.
org.json.simple에서는 욜케 하면 된답니다.
String s="[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
Object obj=JSONValue.parse(s);
JSONArray array=(JSONArray)obj;
System.out.println(array.get(1));
JSONObject obj2=(JSONObject)array.get(1);
System.out.println(obj2.get("1"));
Result:
{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}
{"2":{"3":{"4":[5,{"6":7}]}}}
그럼 Json-lib 에서는???
JSONObject jo = JSONObject.fromObject("{\"aa\":\"bb\"}");
이렇게 하면 됩니다.
jo.toString() => {"aa":"bb"}
jo.get("aa") => bb
이렇게 되더군요.
이상입니다. 별것도 아닌 내용인데 저는 왜이리 찾아 헤맸는지...
출처 : http://merongworld.tistory.com
'프로그램 언어 > 자바스크립트' 카테고리의 다른 글
Javascript Regular Expression Validator (0) | 2011.07.09 |
---|---|
마우스 오른쪽 버튼 및 F5 버튼 막는법 (0) | 2010.07.12 |
showModalDialog 사용법 (0) | 2010.03.14 |
YUI를 사용하여 Json 만들기 (0) | 2010.03.04 |
firefox javscript shell (0) | 2009.09.28 |