소개

JSON은 JavaScript Object Notation의 약자입니다. JavaScript 문법으로 데이터를 기술한것이 특징인데 대부분의 브라우저는 JavaScript를 지원해 호환성이 좋고 XML과 비교하면 데이터 표현이 단순하기 때문에 기기간 통신에 사용하는 데이터 포맷으로 많이 쓰이고 있습니다.

Content-Type: application/json; charset=utf-8

JSON의 미디어 타입은 'application/json' 입니다. JSON은 스펙 상 UTF-8, UTF-16, UTF-32 중 하나로 인코딩하도록 되어 있기 때문에 최초의 4바이트를 검사하면 문자 인코딩을 알아낼 수 있지만, HTTP 헤더의 Content-Type에 charset으로 지정하는 것이 좋습니다. 특별한 이유가 없는 한 UTF-8을 사용하는것이 무난합니다.

문법

기본 자료형

JSON은 다음의 자료형을 지원합니다.

  • object
  • array
  • string
  • number
  • boolean
  • null

객체(Object)

{
	"name" : {
		"first": "Taewoo",
		"last": "Lee"
	},
	"site": "http://www.oiehot.com",
	"age": "31",
	"interests": {"Go", "Dart", "Html5", "CSS3", "Http"}
}

객체는 이름과 값의 집합입니다. 이름과 값의 세트를 객체에서는 '멤버'라고 부릅니다. 멤버의 이름은 항상 문자열입니다. 멤버의 값은 JSON이 지원하는 객체, 배열, 문자열, 숫자, 불린, NULL 자료형의 값을 가질 수 있습니다. 객체는 { }로 감싸주며 멤버는 쉼표(,)로 구분합니다. 멤버와 값은 콜론(:)으로 구분합니다.

배열(Array)

[ "foo", "bar", "baz" ]
[ {"foo":"bar"}, {"key":"value"} ]
[ [10, 10], [40, 50] ]
[ ]
[ {"foo":"bar"}, "baz", 100, true, null ]

배열은 [ ]로 감싸주고, 값은 쉼표(,)로 구분합니다.

문자열(String)

"가나다"
"\uAC00\uB098\uB2E4"
"foo\\bar\n"

문자열은 이중인용부호(")로 감싸줍니다. 유니코드를 숫자로 표현하기 위해서 \uXXXX 형식으로 Escape 할 수 있습니다. 백슬래시(\\)와 줄바꿈(\n) 같은 제어문자 Escape도 지원합니다.

수치(Number)

10
-100
30.1
1.0E-10

정수와 부동소수점 모두를 포함합니다. 표기는 10진법만 가능합니다.

불린(Boolean)

true
false

값이 참이냐 거짓인가를 취하는 불린형은 리터럴로 준비되어 있습니다. 반드시 소문자로 써야 합니다.

  • 리터럴 : 프로그램 소스코드에 직접 기술하는 변수와 상수 이외의 값을 말합니다.

Null

null

null값도 리터럴로 준비되어 있습니다. 반드시 소문자로 써야 합니다.

  • null값 : 프로그램 언어에서 값이 없음을 의미하는 값입니다.

자료형 응용

시간

시간은 기본적인 자료형으로 제공하지 않습니다. 개발자가 어떤 규칙을 정해서 사용해야 합니다. 가장 단순한것은 Unix 시간(Unix Epoch)으로 수치로 표현하는 방법입니다.

1234567890 // 2009년 2월 14일 08시 31분 30초
1382803323 // 2013년 10월 27일 01시 02분 03초

Unix 시간의 경우 타임 존을 다룰 수 없기 때문에 타임 존을 취급할 필요가 있을 때 JavaScript의 Date 클래스의 toString() 메서드로 출력한 문자열을 이용할 수 있습니다.

Mon Sep 23 2013 10:30:00 GMT+0900 // Firefox 23
Mon Sep 23 2013 10:30:00 GMT+0900 (대한민국 표준시) // Chrome 29
Mon Sep 23 2013 10:30:00 GMT+0900 (대한민국 표준시) // Opera 15
Mon Sep 23 10:30:00 UTC+0900 2013 // Internet Explorer 10

하지만 위 메소드는 브라우저마다 다른 결과를 보여주는 문제점이 있습니다. 따라서 좀 더 표준적인 포맷에 맞춰주는것이 바람직합니다. 다음은 ISO 8601 포맷의 예입니다.

2010-09-23T10:30:00+09:00

링크

링크를 표현하기 위해서는 단순히 URI를 문자열 값으로 사용하는게 가장 간편합니다.

{ "href": "http://example.com/foo/bar" }

멤버의 이름을 href, src 같이 HTML에서 자주 사용하는 태그로 맞춰두면 사용하는 사람은 이 멤버가 링크라는 것을 쉽게 파악할 수 있을것입니다.

JSONP

JSONP는 JSON with Padding 의 약자입니다.

(학습예정 - 웹을 지탱하는 기술 - 348p)

자료


 


원본 http://oiehot.com/it/language/json/

Posted by 장안동베짱e :