posted by 방랑군 2012. 1. 4. 13:06
충처 : http://kimstar.pe.kr/blog/74

1. 개요


1) JSON : JavaScript Object Notation
2) lightweight data 교환 형식.
3) 사람이 읽고 쓰기 쉬움.
4) 기계가 파싱하고 생성하기 쉬움. 
 

2. 일반사항


1) The official Internet media type for JSON : application/json
2) 확장자 : .json
3) Structured dat를 네트워크 상에서 주고 받을때 주로 사용 (주로 Ajax 등에서)
4) subset of Javascript : specifically, Standard ECMA-262 3rd Edition?December 1999
6) json.org : JSON 바인딩에 대한 다양한 자료 제공
7) Yahoo / Google : JSON 지원 

3. 특징


1) JavaScript의 Array 문법으로 데이터 구조를 기술하는 방법으로 XML이 가지는 유연성과 구조적 데이터 표현기능을 확보하면서, XML이 가진 오버헤드를 줄이는 방법으로 사용되고 있다.
2) 클라이언트에서는 JavaScript의 eval()로 객체로 만들어 사용, 별도의 파싱 절차가 필요없음 (클라이언트에서 처리 퍼포먼스 높음)
3) 서버측 JSON 파싱 모듈은 거의 모든 언어별로 지원(Java, C, ActionScript, Delphi, Ruby, Perl, CAMAL등)
4) 클라이언트/서버측 모두 송신은 문자열 조립으로 처리
5) XML이 표현하는 구조적인 정보 모두 표현가능
6) 송수신 데이터로 XML를 사용하는 것에 비해 훨씬 빠르고, 간편하다.
7) language-independent text format, 대부분의 브라우저, 언어에서 지원된다.
8) 주로 XmlHttp 로 script text를 수신하여 다음과 같은 코드로 객체로 build 한다. (예제 : myObject = eval("return " + json_data); )


 

4. 데이타 타입


1) Object
  - 중괄호({})로 시작하고 끝남
  - member : 문자열과 값으로 구성되어 있고 콜론( 으로 구분, 각 멤버들은 콤마(,)로 구분
  - value : 값은 object, string, number, array, true, false, null 사용 가능

사용자 삽입 이미지
사용자 삽입 이미지

2) String
  - 문자열은 쌍따옴표(")로 둘러 쌓여야 함
  - Unicode character 또는 일반적인 escape 문자(\", \\, \/, \b, \f, \n, \r, \t, \u four-hex-digits)를 포함한다.
사용자 삽입 이미지

3) Number
  - integer, real or floating point

사용자 삽입 이미지

4) Array
  - an ordered sequence of values
  - 대괄호([])로 시작하고 끝나며 각 값은 콤마(,)로 구분

사용자 삽입 이미지

5) true
6) false
7) null


 

5. 예제 #1


1) 사람을 나타내는 JSON 예제

(Language : javascript)
  1.   {
  2.     "firstName""John",
  3.     "lastName""Smith",
  4.     "address"{
  5.      "streetAddress""21 2nd Street",
  6.      "city""New York",
  7.      "state""NY",
  8.      "postalCode"10021
  9.     },
  10.     "phoneNumbers"[
  11.      "212 555-1234",
  12.      "646 555-4567"
  13.     ]
  14.   }



2) 설명
  - 성,이름,주소,전화라는 각 object는 Key:Value로 구성
  - 각 Object는 ,로 구분
  - 이름의 Value는 String
  - 주소의 Value는 Object
  - 전화의 Value는 배열


3) 사용법
  - var p = eval('(' + contact + ')');
  - p.firstName, p.address.city, p.phoneNumbers[0]

6. 예제 #2

1) 그림을 나타내는 JSON 예제

(Language : javascript)
  1.   {
  2.   "Image"{
  3.     "Width":800,
  4.     "Height":600,
  5.     "Title":"View from 15th Floor",
  6.     "Thumbnail":{
  7.    "Url":"http:/\/scd.mm-b1.yimg.com\/image\/481989943",
  8.    "Height"125,
  9.    "Width""100"
  10.     },
  11.     "IDs":[ 11694323438793 ]
  12.     }
  13.   }



2) 설명
  - 출처 : rfc4627
  - 예제에서 Image는 최상위 object이고 모든 다른 데이터들은 이 object의 멤버.
  - Width, Height, Title는 숫자와 문자열 데이타를 포함하고 있는 기본적인 멤버.
  - Thumbnail은 Url, Height, Width를 멤버로 포함하고 있는 중첩 object.
  - IDs는 숫자 값을 가지고 있는 array.
  - Url 문자열 값에서 슬래쉬 가 escape 됨에 주의


 

7. 예제 #3


 1) 메뉴를 나타내는 JSON 예제

(Language : javascript)
  1.   {"menu"{
  2.     "id""file",
  3.     "value""File",
  4.     "popup"{
  5.    "menuitem"[
  6.      {"value""New""onclick""CreateNewDoc()"},
  7.      {"value""Open""onclick""OpenDoc()"},
  8.      {"value""Close""onclick""CloseDoc()"}
  9.    ]
  10.     }
  11.   }}


 2) 위와 동일한 XML

(Language : xml)
  1.   <menu id="file" value="File">
  2.     <popup>
  3.    <menuitem value="New" onclick="CreateNewDoc()" />
  4.    <menuitem value="Open" onclick="OpenDoc()" />
  5.    <menuitem value="Close" onclick="CloseDoc()" />
  6.     </popup>
  7.   </menu>



 

8. PHP


1) 5.2버전부터 json_encode 함수 지원
2) 서버에서 JSON 포멧으로 리턴하는 예제

(Language : php)
  1. <?php
  2.   $popups = array();
  3.   $popups[] = 'This is the first popup';
  4.   $popups[] = 'This is the second popup';
  5.   $return['popups'] = $popups;
  6.   $return['result'] = 'success';
  7.   // output correct header
  8.   $isXmlHttpRequest = (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) ?
  9.     (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ? true : false:false;
  10.   ($isXmlHttpRequest) ? header('Content-type: application/json') : header('Content-type: text/plain');
  11.   echo json_encode($return);
  12. ?>


3) ob_XXX 함수를 사용하여 JSON 포멧을 리턴하는 예제

(Language : php)
  1. <?php
  2. // start capturing output buffer
  3. ?>
  4.  
  5. <p>An HTML paragraph</p>
  6.  
  7. <?php
  8. // Flush any HTML output
  9. $return['html'] = ob_get_contents();
  10.  
  11. $return['result'] = 'success';
  12.  
  13. header('Content-type: application/json');
  14. echo json_encode($return);
  15. ?>


 


9. C#


1) JSON_checker : http://www.raboof.com/projects/jsonchecker/ 
2) Jayrock : http://jayrock.berlios.de/ 
3) Json.NET - LINQ to JSON : http://james.newtonking.com/projects/json-net.aspx 
4) JSONSharp : http://code.google.com/p/jsonsharp/ 
5) LitJSON : http://litjson.sourceforge.net/ 
6) JSON for .NET : http://sourceforge.net/projects/csjson 
7) JsonFx : http://jsonfx.net/download/ 
8) JsonExSerializer : http://code.google.com/p/jsonexserializer/ 

  - Serialize to String

(Language : csharp)
  1. MyClass myClass = new MyClass();
  2. string result = serializer.Serialize(myClass);


  - Serialize to TextWriter

(Language : csharp)
  1. MyClass myClass = new MyClass();
  2. TextWriter writer = new TextWriter(new FileStream("somefile.jsx", FileMode.Create));
  3. serializer.Serialize(myClass, writer);
  4. writer.Close();


  - Deserialize from String

(Language : csharp)
  1. string result = ... Populate the string with previously serialized content 
  2. MyClass myClass = (MyClass) serializer.Deserialize(result);


  - Deserialize from TextReader

(Language : csharp)
  1. TextReader reader = new TextReader(new FileStream("somefile.jsx", FileMode.Open));
  2. MyClass myClass = (Myclass) serializer.Deserialize(reader);
  3. reader.Close();


  - JsonExSerializer 비교 결과 (내 노트북에서의 시험 결과임. Pentium M 1.6GHz, 1GB RAM)

   -----------------------------------------------------
   Serialization Performance Test
   Serializer Type: BinarySerializer
   File Size      : 19128 bytes
   Iterations     : 2500
   Object Count   : 100
   Total Time     : 10472ms
   Avg Time       : 4.189ms per iteration
   -----------------------------------------------------
   Deserialization Performance Test
   Serializer Type: BinarySerializer
   File Size      : 19128 bytes
   Iterations     : 2500
   Object Count   : 100
   Total Time     : 4456ms
   Avg Time       : 1.782ms per iteration
   -----------------------------------------------------
   Serialization Performance Test
   Serializer Type: XmlSerializer
   File Size      : 31565 bytes
   Iterations     : 2500
   Object Count   : 100
   Total Time     : 9559ms
   Avg Time       : 3.824ms per iteration
   -----------------------------------------------------
   Deserialization Performance Test
   Serializer Type: XmlSerializer
   File Size      : 31565 bytes
   Iterations     : 2500
   Object Count   : 100
   Total Time     : 3981ms
   Avg Time       : 1.592ms per iteration
   -----------------------------------------------------
   Serialization Performance Test
   Serializer Type: JsonExSerializer
   File Size      : 31989 bytes
   Iterations     : 2500
   Object Count   : 100
   Total Time     : 16033ms
   Avg Time       : 6.413ms per iteration
   -----------------------------------------------------
   Deserialization Performance Test
   Serializer Type: JsonExSerializer
   File Size      : 31989 bytes
   Iterations     : 2500
   Object Count   : 100
   Total Time     : 22302ms
   Avg Time       : 8.921ms per iteration
   -----------------------------------------------------


 

9. Javascript


 1) http://www.json.org/json.js  - 최신버전 json.js 다운받기
 2) http://www.json.org/json2.js  - JSON2 릴리즈. (Object.prototype 에 속성을 추가하지 않도록 수정되었음)


10. 출처


 1) http://en.wikipedia.org/wiki/JSON 
 2) http://www.0bin.net/moniwiki/wiki.php/p ··· F03_json 
 3) http://www.json.com 
 4) http://json.org/ 
 5) http://www.ietf.org/rfc/rfc4627.txt?number=4627 
 6) http://2.0business.kr/wiki/wiki.php/JSON 
 7) http://steelleg.tistory.com/169 


11. 첨부




 

'PP > JSON' 카테고리의 다른 글

JSON 의 eval() 함수 사용의 문제  (0) 2012.01.09
JSON Text를 JSON Object로 변환하기  (0) 2012.01.09
Json / JQuery (Ajax)/ Asp.net 3가지를 연동하여 데이터 가져오기  (0) 2012.01.07
DATASET - > JSON  (1) 2012.01.04
JSON.NET  (0) 2012.01.04