2006년 10월 23일 |
1.왜 JSON에 JSON.simple이 필요한 겁니까?
제가 AJAX클라이언트와 JSP사이에 송수신 데이터 포맷으로 JSON을 처음 사용했을때, 가장 걱정스러웠던 점은 어떻게 자바 문자열과 숫자가 AJAX 클라이언트에서 잘만들어진 데이터로 수신받을 수있도록 서버측에 정확하게 인코딩을 하느냐 였습니다.
JSON 웹사이트의 'JSON in Java'를 들어가보고, 저는 JSONObject 와 JSONArray가 더 간단해질수 있다는 것을 발견하였습니다. 이미 간단해진 JSON 에서 보다 더 말이죠, 그래서 저는 JSON.simple 패키지를 작성하게 되었습니다.
2. 정말 그렇게 간단한가요?
제생각엔 그렇습니다. 예를 들어볼까요?
import org.json.simple.JSONObject;
JSONObject obj=new JSONObject();
obj.put("name","foo");
obj.put("num",new Integer(100));
obj.put("balance",new Double(1000.21));
obj.put("is_vip",new Boolean(true));
obj.put("nickname",null);
System.out.print(obj);
Result:
{"nickname":null,"num":100,"balance":1000.21,"is_vip":true,"name":"foo"}
JSONObject.toString() 은 컨트롤들이나, 특수값들을 정확하게 걸러내줍니다.
3. JSON.simple을 어떻게 JSP에서 사용할 수 있나요?
JSP에서 예를 들어보겠습니다.:
<%@page contentType="text/html; charset=UTF-8"%>
<%@page import="org.json.simple.JSONObject"%>
<%
JSONObject obj=new JSONObject();
obj.put("name","foo");
obj.put("num",new Integer(100));
obj.put("balance",new Double(1000.21));
obj.put("is_vip",new Boolean(true));
obj.put("nickname",null);
out.print(obj);
out.flush();
%>
그래서 AJAX 클라이언트는 responseText를 가질 수 있게 되지요.
4.JSONObject에 대해서 좀더 자세히 알고싶어요.
JSONObject는 java.util.HashMap을 상속받고 있어요, 그래서 키와 밸류값이 매핑되는 것에 대해 걱정할 것이 없어요.
get(), put(), remove() 나 그외의 다른 맵 메소드들을 자유롭게 사용하세요. JSONObject.toString()은 JSON 데이터 문자열을 얻기위해 키값의 쌍을 비교할 것입니다.
만약 그 값이 java.lang.String의 인수라면 JSON은 quote를 달아서 값의 중첩을 막아줄 것입니다.
java.lang.Number, java.lang.Boolean,null,JSONObject and JSONArray는 피해가지 못할것입니다. 오직 java.lang.String.value 의 결과값만 가져갈거에요. null 값은 JSON 'null' 로 결과값에 기록될 것입니다.
만약 당신이 타입을 바꾸어서 입력하지만 않는다면, 그값은 정확하게 입력될 것입니다.
예를 들어보겠습니다.
JSONObject obj2=new JSONObject();
obj2.put("phone","123456");
obj2.put("zip","7890");
obj.put("contact",obj2);
System.out.print(obj);
Result:
{"nickname":null,"num":100,"contact":{"phone":"123456","zip":"7890"},"balance":1000.21,"is_vip":true,"name":"foo"}
JSONObject.escape() 메소드는 자바의 문자열에 인용부호가 포함되어있는 JSON 문자열을 걸러줍니다.
컨트롤과 특수값은 제대로 \b,\f,\r,\n,\t,\",\\,\/,\uhhhh 안으로 들어갈 것 입니다.
5.JSONArray에 대해서 자세히 알고 싶어요.
org.json.simple.JSONArray는 java.util.ArrayList을 상속받아 사용합니다. 자유롭게 get(),add(),remove(),iterator() 등을 사용하세요. JSONArray.toString()의 룰은 JSONObject.toString()과 비슷합니다.
이 예제를 참고하세요.
import org.json.simple.JSONArray;
JSONArray array=new JSONArray();
array.add("hello");
array.add(new Integer(123));
array.add(new Boolean(false));
array.add(null);
array.add(new Double(123.45));
array.add(obj2);//see above
System.out.print(array);
Result:
["hello",123,false,null,123.45,{"phone":"123456","zip":"7890"}]
6. JSONValue에 해당하는 건 무엇인가요?
org.json.simple.JSONValue 는 Java Object를 분석해서 JSON data로 넣습니다.
JSON 에서 가상 중요한 엔티티는 JSON value 입니다. JSON object 가 아니에요.
JSON string, boolean, number, null을 다시한번 object로 싸줄(wrap) 필요는 없습니다.
자바에는 이미 String, Boolean, Number, null을 담당하는 class들이 있습니다.
The mapping is:
JSON Java
------------------------------------------------
string <=> java.lang.String
number <=> java.lang.Number
true|false <=> java.lang.Boolean
null <=> null
array <=> org.json.simple.JSONArray
object <=> org.json.simple.JSONObject
------------------------------------------------
JSONValue 는 java.io.Reader나 java.lang.String에서 값을 받아오는 JSONValue.parse() 메소드만을 가집니다.
JSONValue.parse()의 반환형은 위의 매핑 정보를 따릅니다.
만약에 입력이 올바르지 않거나, 분석(parsing)도중 예외처리가 발생하면, null을 반환합니다.
아주 엄청난 것을 구현하려고 하는 것이라면, 저도 방법이 없습니다만, 제 생각에는 이렇게 하는 것이 사용자들에게
더 편의를 제공해준다고 생각합니다.
여기에 예제가 있습니다.
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}]}}}
7.만든이
I'm a Java EE developer on Linux.
I'm working on web systems and information retrieval systems.
I also develop 3D games and Flash games.
Fang Yidong<fangyidong@yahoo.com.cn>
Fang Yidong<fangyidng@gmail.com>
제가 AJAX클라이언트와 JSP사이에 송수신 데이터 포맷으로 JSON을 처음 사용했을때, 가장 걱정스러웠던 점은 어떻게 자바 문자열과 숫자가 AJAX 클라이언트에서 잘만들어진 데이터로 수신받을 수있도록 서버측에 정확하게 인코딩을 하느냐 였습니다.
JSON 웹사이트의 'JSON in Java'를 들어가보고, 저는 JSONObject 와 JSONArray가 더 간단해질수 있다는 것을 발견하였습니다. 이미 간단해진 JSON 에서 보다 더 말이죠, 그래서 저는 JSON.simple 패키지를 작성하게 되었습니다.
2. 정말 그렇게 간단한가요?
제생각엔 그렇습니다. 예를 들어볼까요?
import org.json.simple.JSONObject;
JSONObject obj=new JSONObject();
obj.put("name","foo");
obj.put("num",new Integer(100));
obj.put("balance",new Double(1000.21));
obj.put("is_vip",new Boolean(true));
obj.put("nickname",null);
System.out.print(obj);
Result:
{"nickname":null,"num":100,"balance":1000.21,"is_vip":true,"name":"foo"}
JSONObject.toString() 은 컨트롤들이나, 특수값들을 정확하게 걸러내줍니다.
3. JSON.simple을 어떻게 JSP에서 사용할 수 있나요?
JSP에서 예를 들어보겠습니다.:
<%@page contentType="text/html; charset=UTF-8"%>
<%@page import="org.json.simple.JSONObject"%>
<%
JSONObject obj=new JSONObject();
obj.put("name","foo");
obj.put("num",new Integer(100));
obj.put("balance",new Double(1000.21));
obj.put("is_vip",new Boolean(true));
obj.put("nickname",null);
out.print(obj);
out.flush();
%>
그래서 AJAX 클라이언트는 responseText를 가질 수 있게 되지요.
4.JSONObject에 대해서 좀더 자세히 알고싶어요.
JSONObject는 java.util.HashMap을 상속받고 있어요, 그래서 키와 밸류값이 매핑되는 것에 대해 걱정할 것이 없어요.
get(), put(), remove() 나 그외의 다른 맵 메소드들을 자유롭게 사용하세요. JSONObject.toString()은 JSON 데이터 문자열을 얻기위해 키값의 쌍을 비교할 것입니다.
만약 그 값이 java.lang.String의 인수라면 JSON은 quote를 달아서 값의 중첩을 막아줄 것입니다.
java.lang.Number, java.lang.Boolean,null,JSONObject and JSONArray는 피해가지 못할것입니다. 오직 java.lang.String.value 의 결과값만 가져갈거에요. null 값은 JSON 'null' 로 결과값에 기록될 것입니다.
만약 당신이 타입을 바꾸어서 입력하지만 않는다면, 그값은 정확하게 입력될 것입니다.
예를 들어보겠습니다.
JSONObject obj2=new JSONObject();
obj2.put("phone","123456");
obj2.put("zip","7890");
obj.put("contact",obj2);
System.out.print(obj);
Result:
{"nickname":null,"num":100,"contact":{"phone":"123456","zip":"7890"},"balance":1000.21,"is_vip":true,"name":"foo"}
JSONObject.escape() 메소드는 자바의 문자열에 인용부호가 포함되어있는 JSON 문자열을 걸러줍니다.
컨트롤과 특수값은 제대로 \b,\f,\r,\n,\t,\",\\,\/,\uhhhh 안으로 들어갈 것 입니다.
5.JSONArray에 대해서 자세히 알고 싶어요.
org.json.simple.JSONArray는 java.util.ArrayList을 상속받아 사용합니다. 자유롭게 get(),add(),remove(),iterator() 등을 사용하세요. JSONArray.toString()의 룰은 JSONObject.toString()과 비슷합니다.
이 예제를 참고하세요.
import org.json.simple.JSONArray;
JSONArray array=new JSONArray();
array.add("hello");
array.add(new Integer(123));
array.add(new Boolean(false));
array.add(null);
array.add(new Double(123.45));
array.add(obj2);//see above
System.out.print(array);
Result:
["hello",123,false,null,123.45,{"phone":"123456","zip":"7890"}]
6. JSONValue에 해당하는 건 무엇인가요?
org.json.simple.JSONValue 는 Java Object를 분석해서 JSON data로 넣습니다.
JSON 에서 가상 중요한 엔티티는 JSON value 입니다. JSON object 가 아니에요.
JSON string, boolean, number, null을 다시한번 object로 싸줄(wrap) 필요는 없습니다.
자바에는 이미 String, Boolean, Number, null을 담당하는 class들이 있습니다.
The mapping is:
JSON Java
------------------------------------------------
string <=> java.lang.String
number <=> java.lang.Number
true|false <=> java.lang.Boolean
null <=> null
array <=> org.json.simple.JSONArray
object <=> org.json.simple.JSONObject
------------------------------------------------
JSONValue 는 java.io.Reader나 java.lang.String에서 값을 받아오는 JSONValue.parse() 메소드만을 가집니다.
JSONValue.parse()의 반환형은 위의 매핑 정보를 따릅니다.
만약에 입력이 올바르지 않거나, 분석(parsing)도중 예외처리가 발생하면, null을 반환합니다.
아주 엄청난 것을 구현하려고 하는 것이라면, 저도 방법이 없습니다만, 제 생각에는 이렇게 하는 것이 사용자들에게
더 편의를 제공해준다고 생각합니다.
여기에 예제가 있습니다.
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}]}}}
7.만든이
I'm a Java EE developer on Linux.
I'm working on web systems and information retrieval systems.
I also develop 3D games and Flash games.
Fang Yidong<fangyidong@yahoo.com.cn>
Fang Yidong<fangyidng@gmail.com>
'Back-End > Java' 카테고리의 다른 글
Apache Common유틸로 숫자난수 생성 (0) | 2012.07.18 |
---|---|
JSON.simple 라이브러리를 이용한 Java에서 JSON 포맷 문자열 파싱 (0) | 2012.05.07 |
Class.forName - 변수로 클래스를 만들때 (0) | 2012.03.06 |
[Log4j] log4j.properties 설정 (0) | 2012.02.28 |
Checked & UnChecked Exception (0) | 2012.02.24 |