JSON 개요 및 예제


1. 개요

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

2. 일반사항

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

3. 특징

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

 {
    "firstName": "John",
    "lastName": "Smith",
    "address": {
     "streetAddress": "21 2nd Street",
     "city": "New York",
     "state": "NY",
     "postalCode": 10021
    },
    "phoneNumbers": [
     "212 555-1234",
     "646 555-4567"
    ]
  }

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 예제

{
  "Image": {
    "Width":800,
    "Height":600,
    "Title":"View from 15th Floor",
    "Thumbnail":{
        "Url":"http://scd.mm-b1.yimg.com/image/481989943",
        "Height": 125,
        "Width": "100"
     },
     "IDs":[ 116, 943, 234, 38793 ]
  }
}

2) 설명

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

7. 예제 #3

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

{"menu": {
    "id": "file",
    "value": "File",
    "popup": {
    "menuitem": [
       {"value": "New", "onclick": "CreateNewDoc()"},
       {"value": "Open", "onclick": "OpenDoc()"},
       {"value": "Close", "onclick": "CloseDoc()"}
     ]
    }
}}

2) 위와 동일한 XML

<menu id="file" value="File">
  <popup>
    <menuitem value="New" onclick="CreateNewDoc()" />
    <menuitem value="Open" onclick="OpenDoc()" />
    <menuitem value="Close" onclick="CloseDoc()" />
  </popup>
</menu>

8. PHP

  • 5.2버전부터 json_encode 함수 지원

서버에서 JSON 포멧으로 리턴하는 예제

<?php
  $popups = array();

  $popups[] = 'This is the first popup';
  $popups[] = 'This is the second popup';

  $return['popups'] = $popups;
  $return['result'] = 'success';

  // output correct header
  $isXmlHttpRequest = (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) ?
    (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ? true : false: false;
  ($isXmlHttpRequest) ? header('Content-type: application/json') : header('Content-type: text/plain');

  echo json_encode($return)
?>

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

<?php
// start capturing output buffer
ob_start();
?>

<p>An HTML paragraph</p>

<?php
// Flush any HTML output
$return['html'] = ob_get_contents();
ob_end_clean();

$return['result'] = 'success';

header('Content-type: application/json');
echo json_encode($return);
?>

9. C#

참고자료

Serialize to String

MyClass myClass = new MyClass();
string result = serializer.Serialize(myClass);

 Serialize to TextWriter

MyClass myClass = new MyClass();
TextWriter writer = new TextWriter(new FileStream("somefile.jsx", FileMode.Create));
serializer.Serialize(myClass, writer);
writer.Close();

 Deserialize from String

string result = ... Populate the string with previously serialized content
MyClass myClass = (MyClass) serializer.Deserialize(result);

 Deserialize from TextReader

TextReader reader = new TextReader(new FileStream("somefile.jsx", FileMode.Open));
MyClass myClass = (Myclass) serializer.Deserialize(reader);
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

10. 출처

11. 첨부

JSON_WEB.zip

JsonExSerializer-2.0.0.100.zip

12. 기타

광고

12개의 댓글

    • 크리에이티브 커먼즈 라이센스에 따라 출처를 남기고 사용해 주시기 바랍니다.
      유용한 자료가 되었기를 바랍니다. ^^

댓글 남기기