Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

JSON

JSON(Javascript Object Notation)은 attribute-value 쌍으로 구성되는 텍스트 기반의 정보 표현 포멧이다. XML과 마찬가지로 서버와 클라이언트간 데이터를 교환하기 위한 목적으로 사용한다. 특히. 웹 애플리케이션에서 널리 사용한다.

원래는 자바스크립트 언어에서 사용하기 위해서 만들었지만, 언어에 독립적 테이터 타입이다. 여러가지 다양한 속성들을 가지는 XML에 비해서, 하나의 attribute와 하나의 key를 가지는 단순한 구조라서 데이터를 만들고 이용하기가 훨씬 쉽다는 장점이 있다. 지금은 대부분의 언어들이 JSON 생성기와 파서 기능을 지원하고 있다.

데이터 타입과 문법

JSON은 아래의 타입을 지원한다.
  • Number : 소수를 포함한 숫자와 지수 표기법(E)를 지원한다. NaN 같은 숫자가 아닌 데이터는 지원하지 않으며, integer과 floating-point를 구분하지 않는다. 이들에 대한 구분은 애플리케이션 단에서 처리해야 한다.
  • String : Unicode 문자를 지원한다. String은 따움표(Double-quote)로 구분하며, 백스페이스 문자를 사용할 수 있다.
  • Boolean : truefalse를 지원한다.
  • Array : 배열을 지원한다. 배열은 대괄호 표기법으로 표현할 수 있다.
  • Object : 정렬되지 않은 연관배열(name과 key로 이루어진) 객체를 사용할 수 있다.
  • null : 값이 없을 경우 null을 사용할 수 있다.
아래는 개인정보를 포현하는 JSON 파일 예제다. Number, String, Boolean, Array, Object, null을 모두 포함하고 있다.
{
	"firstName": "John",
	"lastName": "Smith",
	"isAlive": true,
	"age": 25,
	"height_cm": 167.6,
	"address": {
		"streetAddress": "21 2nd Street",
		"city": "New York",
		"state": "NY",
		"postalCode": "10021-3100"
	},
	"phoneNumbers": [
	{
		"type": "home",
		"number": "212 555-1234"
	},
	{
		"type": "office",
		"number": "646 555-4567"
	}
	],
		"children": [],
		"spouse": null
}

JSON-RPC

JSON-RPC는 XML-RPC와 SOAP를 대신하는 RPC 프로토콜로, XML대신에 RJSO을 사용한다. JSON의 사양 자체가 단순해서, 가볍게 사용하기에 좋다는 장점이 있다. 복잡한 데이터를 주고 받는 시스템이 아니라면, JSON-RPC를 사용해볼만 하다.
요청 : {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}
응답 : {"jsonrpc": "2.0", "result": 19, "id": 1}

MIME type

JSON 데이터를 위한 공식 MIME 타입은 "application/json"이다. 이 외에도 오래된 MIME 타입을 지원하기 위해서 "text/json""text/javascript" 도 인식한다.

브라우저에서의 인코딩및 디코딩 지원

최신의 모든 브라우저들은 JSON 인코딩/디코딩 기능을 내장하고 있다. 한때 eval() 함수를 이용해서 JSON 데이터를 처리하기도 했지만, 2009년 이후로는 브라우저에서 지원하는 JSON.parse()와 JSON.stringify()를 이용해서 처리하고 있다.
  • Mozilla Firefox 3.5 이상
  • Internet Exxplorer 8 이상
  • Opera 10.5 이상
  • WebKit 기반 브라우저들 (애플 Safari)
  • Blink 기반 브라우저들 (구글 Chrome, Opera)
많은 자바스크립트 라이브러리들 역시 JSON을 지원한다.
  • YUI 라이브러리
  • Prototype
  • jQuery
  • Dojo 툴킷
  • MooTools

장점

  • 텍스트로 이루어져 있어서, 사람이 읽고 쓰기가 쉽다.
  • 개발과 디버깅이 쉽다.
  • 단순하다.
  • (특히 웹 브라우저기반의)웹 애플리케이션과 궁합이 잘 맞는다.
  • 스키마에 대한 정보가 없어도 파싱할 수 있다.

단점

  • 바이너리 프로토콜에 비해서 파싱이 느리다.
  • 바이너리 프로토콜에 비해서 데이터가 크다.
메시징 인프라를 개발한다면, JSON 대신에 protocol buffer, thrift와 같은 바이너리 기반의 직렬화 프로토콜을 검토해보자.