JSON 이란?

2013.08.14 20:57

가을의 곰을... 조회 수:7203

 

[출처] http://cafe.daum.net/javakiller/Q6Mw/4?docid=1OolGQ6Mw420111222183054

JSON이란?

1. JSON은 무엇인가?

o 경량의 데이타 교환 포맷이다.
> XML과 비교한다.
 

o 간단한 포맷
> 사람들을 위해 읽고 쓰기가 쉽다.

> 기계들을 위해 분석과 생성이 쉽다.
 

o JSON은 텍스트 포맷이다.
> 언어에 독립적으로 프로그래밍된다.

> 프로그래머들에게 잘 알려진 C
,C++,C#,Java,xxJavaScript,Perl,Pyton을 포함하는 C와 유사한 언어로 모여서 사용된다.

2. XML을 넘어 왜 JSON인가?

o on-the-wire(선을 통한) 데이타 포맷인 XML보다 가볍고 빠르다.

o JSON 오브젝트는 XML 데이타가 타입이 없는데 비해 타입을 가진다.
> JSON
types : string, number, array, boolean
> XML
데이타는 모두 String 이다.

o xxJavaScript 코드를 위해 Native 코드포맷이다.
> Data는 사용자의
xxJavaScript코드 안에서 JSON 객체에 접근이 쉽다.
XML
데이타가 해석과 장황한 DOM API를 통해 변수에 접근하는 것을 필요로 하는데 비해
> 회수한 값들은 사용자의 자바스크립트 안의 객체속성에서 읽기가 쉽다.
 

3. JSON은 어디에서 사용되는가?

o 구성정보를 나타낸다.

o 통신 프로토콜을 실행한다.

JSON Object

1. JSON 구조

o name/value 쌍으로 구성된다.
>
여러가지의 언어들에서 object, record, struct, dictionary, hashtable, 키를 가지는 리스트, 배열집합 처럼 얻어진다.

o 값들이 리스트는 순서가 있다.
> 대부분의 언어들에서 array, vector, list, sequence 처럼 얻어진다.
 

o JSON은 대부분의 지금의 언어를 통해 일반적인 데이타구조들이 지원된다.

2. JSON Object 표기법

o JSON Object는 name/value 쌍의 set은 순서가 없다.

o JSON Object는 { 로 시작하고 } 로 끝난다.

o 각각의 이름은 : 와 ,로 구분된 name/value 쌍의 형식을 따른다.

3. JSON과 xxJavaScript

o JSON은 xxJavaScript의 객체 문자 표기의 부분집합이다.
> JSON은
xxJavaScript안에서 혼란스럽거나 야단스럽지 않게 사용될 수 있다.

4. JSON Object 예제

5. 

6. var myJSONObject = {"bindings": [

7.     {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},

8.     {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},

9.     {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}

10.   ]

11. };

o 위의 예에서, JSON xxJavaScript 객체는 세개의 객체를 포함한 배열을 갖고있는, 각각은 "ircEvent","method","regex" 멤버들을 포함한 하나의 멤버 "bindings"를 포함하여 생성된다.

o 멤버들은 점(.) 이나 그아래 지시자들로 회수 할수 있다.

o 

o myJSONObject.bindings[0].method // "newURI"

12. xxJavaScript 코드안에서 Text를 Object로 변환하기

13. 

14. var myObject = eval!('(' + myJSONtext + ')');

o eval!() 함수를 사용하여, JSON text를 JSON 객체로 변환한다.
>
eval!()은 xxJavaScript 컴파일러에서 실행한다.
> JSON은
xxJavaScript의 서브셋으로 적합하다. 컴파일러는 text를 정확하게 변환하고, 객체 구조를 만든다.

15. 보안 & JSON Parser

16. 

17. // Include http://www.json.org/json.js

18. var myObject = myJSONtext.parseJSON();

o eval!()은 컴파일 할 수 있고, 어떤 xxJavaScript 프로그램에서도 실행된다. 그래서 보안 이슈들(cross-site scripting)을 가질 수 있다.
> 소스를 신뢰할 수
있을때, eval!()을 사용해라.

o 보안이 염려될 때 - 소스를 신뢰할 수 없을때 - JSON parser를 사용하는게 낫다.
> JSON parser는 JSON text를 승인할 수 있다. 그래서 좀더 안전하다.
 

19. Object를 Text로 변환하기

20. 

21. var myJSONText = myObject.toJSONString();

o 사용자는 JSON 객체를 JSON text로 변환할 수 있다.

o JSON은 주기적 데이타 구조를 지원하지 않는다.
 

> Do not give cyclical structures to the JSON
stringifier
> 주기적 구조들을 JSON
stringfier로 줄수 없다

Java 안에서의 JSON

1. 자바 개발자를 위한 JSON Tools

o Parser
> JSON text 파일들을 해석하고, 그들을 자바 모델로 변환한다.
 

o Renderer
> 자바를 text로 표현하게 한다.
 

o Serializer
>
알기쉬운 POJO clusters를 JSON 표현으로 나열한다.

o Validator
> JSON 스키마를 사용하여 JSON 파일의 내용을 유효한지 체크한다.
 

2. JSONObject 자바 클래스

o JSONObject의 name/value 쌍의 집합은 순서가 없다.

o put 메소드는 객체로 name/value쌍을 add 한다.

o text들은 JSON syntax rules을 정확히 따른 toString 메소드에 의해 만들어진다.

o 

o myString = new JSONObject().put("JSON", "Hello, World!").toString();

o // myString is {"JSON": "Hello, World"}

클라이언트와 서버사이드 양쪽에서 JSON 데이타를 주고 받는 방법

1. 서버사이드에서 JSON 데이타를 생성하고 보내는 방법

o JSONObject 자바 객체를 생성한다.

o put 메소드를 사용하여 name/value 쌍을 add한다.

o toString 메소드를 사용하여 String 타입으로 변환한다.
그리고 "text/xml" 또는 "text/plain" 처럼 content-type과 함께 클라이언트로 보낸다.
 

o 

o myString = new JSONObject().put("JSON",toString();

o // myString is {"JSON": "Hello, World"}

2. 클라이언트 사이드에서 JSON 데이타를 받는 방법

o JSON 데이타는 String 처럼 반환된다.

o xxJavaScript 코드안에서 JSON 객체를 만들수 있게 eval!()을 호출한다.
>
var JSONdata = eval!(req.response.Text);

o 사용자는 한번 JSON 객체를 가질수 있고, 객체의 속성들에 접근하기 위해 . 을 사용할 수 있다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

o 

o var name = JSONdata.name;

o var address = JSONdata.addresses[3];

o var streetname = JSONdata.addresses[3].street;

o 클라이언트 사이드에서 JSON 데이타를 생성하고 보내는 방법

o JSON 자바스크립트 객체를 생성한다.

o XMLHttpRequest객체의 open 메소드 안에 "POST" HTTO 메소드를 사용한다.

o XMLHttpRequest객체의 send 메소드안에서 JSON 자바스크립트 객체를 패스한다.

o 

o var carAsJSON = JSON.stringify(car);

o var url = "JSONExample?timeStamp=" + new Date().getTime();

o createXMLHttpRequest();

o xmlHttp.open("POST", url, true);

o xmlHttp.[안내]태그제한으로등록되지않습니다-onreadystatechange = handleStateChange;

o xmlHttp.setRequestHeader("Content-Type",

o "application/x-www-form-urlencoded");

o xmlHttp.send(carAsJSON);

3. 서버사이드에서 JSON 데이타를 받는 방법

o String 타입처럼 JSON데이타를 읽는다.

o string으로부터 JSONObject 자바객체를 생성한다.

o 

o String json = readJSONStringFromRequestBody(request);

o //Use the JSON-Java binding library to create a JSON object in Java

o JSONObject jsonObject = null;

o try {

o jsonObject = new JSONObject(json);

o }

o catch(ParseException pe) {

}

 

--------------------------------------------------------------------------------------------------------------------------

xml                                               json

<e/>                                                         "e": null

<e>text</e>                                              "e": "text"

<e name="value" />                                  "e":{"@name": "value"}

<e name="value">text</e>                        "e":{"@name": "value", "#text": "text"}

<e><a>text</a><b>text</b></e>                "e":{"a": "text", "b": "text"}

<e><a>text</a><a>text</a></e>                "e":{"a": ["text", "text"]}

<e>text<a>text</a></e>                             "e":{"#text": "text", "a":"text"]}

 

서버로부터의 응답이 XML 문서 형태일 경우는, XML 형식을 처리하기 위한 불필요한 코드를 작성해야 한다.

또한 DOM 파서를 실행해야 하므로 메모리 소모가 많아 진다.

따라서 경량의 데이터를 처리하기 위해 JSON 형태를 취하는 경우를 흔히 볼 수 있다.

JSON 은 데이터를 파싱할 경우 자바스크립트의 eval!() 함수를 사용하면 메모리에 부하를 훨씬 줄인 상태로

파싱이 가능해 지므로 매우 효과적인 방법 중 하나로 인정받고 있다.

 

 

- JSON 구조

name/value 쌍으로 구성된다.

JSON은 대부분의 언어를 통해 일반적인 데이터 구조들이 지원된다.

JSON Object는 순서가 필요없이 { 로 시작하고 } 로 끝나는 값의 집합을 가지며 , 그 속에는 [ 와 ]의 순서가 중요한 배열의 형태를 취하고 있다.

각각의 이름은 : 와 ,로 구분된 name/value 의 형식을 따른다.

JSON은 xxJavaScript의 객체 문자 표기의 부분집합이다.

 

- JSON Object 형태

var myJson = {"student": [

{"name": "한국인", "age": 22, "email": "hankukin@korea.com"},

{"name": "지구인", "age": 25, "email": "jikuin@korea.com"},

{"name": ["우주인","자연인"], "age": 23, "email": "woojuin@korea.com"},

 ]};

여기서JSON xxJavaScript 객체는 세개의 객체를 포함한 배열이며, 각각은 "name","age","email" 멤버를 포함한 하나의 멤버 "student" 집합으로 생성된다.

멤버들은 점(.) 이나 그 아래 지시자들로 지적 할 수 있다.

예) myJson.student[0].name;      // "한국인"을 갖는다.

     myJson.student[2].age;       // 23을 갖는다.

 myJson.student[2].name[1];  //"자연인"을 갖는다.

 

xxJavaScript 코드안에서 Text를 Object로 변환하기

예) var data = eval!('(' + xhr.responseText + ')');

 -------------------------------------------------------------------------------

 

빠른속도는 JSON  구체화된 구조적은 XML

 

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
258 데이터분석에서 어떻게 원하는 결과를 얻을 것인가? 가을의 곰을... 2013.11.23 1685
257 [PMO] CIO 의 신규 IT프로젝트 예산 확보 가을의 곰을... 2013.11.23 2168
256 [GIT 사용법] Git Tutorial 가을의 곰을... 2013.10.27 2766
255 3D 프린팅은 어떻게 소비 문화를 바꾸는가_KIDP.pdf file 가을의 곰 2013.10.14 2300
254 [퍼온글]프로토콜 설계의 개요 컴퓨터 가을의 곰을... 2013.09.05 2785
253 BitTorrent Protocol -- BTP/1.0 가을의 곰을... 2013.09.05 3147
252 Linux 시스템 백업과 복원 가을의 곰을... 2013.09.03 2523
» JSON 이란? 가을의 곰을... 2013.08.14 7203
250 동향분석I-6-2013년_IT기술_트렌드_방향과_쟁점.pdf file 가을의 곰을... 2013.08.01 2599
249 2013 IT 산업 10대 이슈 file 가을의 곰을... 2013.08.01 2555
248 R로 하는 Big Data 분석 file 가을의 곰을... 2013.07.24 2682
247 대규모 웹사이트를 구성하기 가을의 곰을... 2013.07.21 4567
246 BDD와 TDD의 차이점 가을의 곰을... 2013.07.19 2950
245 TDD (테스트 주도 설계) 가을의 곰을... 2013.07.19 3460
244 DDD (도메인 주도 설계) file 가을의 곰을... 2013.07.19 2705
243 여러 행 SELECT해서 INSERT 하기 가을의 곰을... 2013.07.17 2909
242 [본문스크랩] iPhone용 Open Source 모음 file 가을의 곰을... 2013.07.17 3606
241 [iBatis] 다중 쿼리 사용하기. 가을의 곰을... 2013.07.17 7675
240 Blender 3D Hotkeys, Shortcut Keys and Reference 가을의 곰을... 2013.07.13 5107
239 OLC 블렌더 강좌 : 블렌더 3d 단축키 가을의 곰을... 2013.07.13 7873
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED