이 글은 ECMA-404의 한국어 번역본입니다

JSON 데이터 교환 포맷

1 목적

JSON은 가볍고, 텍스트 기반이고, 언어에 독립적인 데이터 교환 포맷입니다. JSON은 ECMAScript 프로그래밍 언어로 전송하나, 프로그래밍 언어에 독립적입니다. JSON은 구조적 데이터의 휴대성 표현을 위한 구조 규칙의 작은 집합을 정의합니다.

2 적합 요구사항

준수하는 JSON 텍스트는 JSON 문법을 엄격하게 준수하는 유니코드 코드 포인트의 시퀀스입니다.

3 표준 레퍼런스

아래 레퍼런스 문서는 이 문서의 애플리케이션을 위해 필수인 문서입니다. 일자로 참조하여, 인용판만을 적용합니다. 일자로 참조하지 않는 건, 레퍼런스의 최신 버전을 적용합니다. (모든 개정을 포함합니다)

ISO/IEC 10646:2012, Information Technology – Universal Coded Character Set (UCS)

The Unicode Consortium. The Unicode Standard, Version 6.2.0, (Mountain View, CA: The Unicode Consortium, 2012. ISBN 978-1-936213-07-8)

http://www.unicode.org/versions/Unicode6.2.0/

4 JSON 텍스트

JSON 텍스트는 JSON 값 문법을 따르는 유니코드 코드 포인트로 이루어진 토큰의 시퀀스입니다. 토큰의 집합에는 여섯 개의 구조적 토큰, 문자열, 숫자, 세 개의 리터럴 이름 토큰을 포함합니다.

여섯 개의 구조적 토큰입니다:

[ U+005B left square bracket

{ U+007B left curly bracket

] U+005D right square bracket

} U+007D right curly bracket

: U+003A colon

, U+002C comma

세 개의 리터럴 이름 토큰이 있습니다:

true U+0074 U+0072 U+0075 U+0065

false U+0066 U+0061 U+006c U+0073 U+0065

null U+006E U+0075 U+006C U+006C

사소한 공백(Whitespace)은 어떤 토큰의 앞이나 뒤에서 허용됩니다. 공백 문자는: character tabulation (U+0009), line feed (U+000A), carriage return (U+000D), space (U+0020)입니다. 공백은 문자열을 제외한 다른 토큰 안에서는 허용되지 않습니다.

5 JSON 값

JSON 값에는 객체, 배열, 숫자, 문자열, true, false, null을 넣을 수 있습니다.

Figure 1 - 값

6 객체

객체 구조는 중괄호 토큰의 쌍으로 감싸진 0개 혹은 그 이상의 이름(name)/값(value) 쌍으로 표현됩니다. 이름은 문자열(string)입니다. 단일 콜론 토큰은 각각 이름에 따라, 값을 이름과 구별합니다. 단일 콤마 토큰은 다음에 오는 이름과 값을 구분합니다.

Figure 2 - 객체

7 배열

배열 구조는 대괄호 토큰의 쌍으로 감싸진 0개 혹은 그 이상의 값입니다. 값은 콤마로 구분합니다. 값의 순서는 중요합니다.

Figure 3 - 배열

8 숫자

숫자는 불필요한 선두 0을 제외한 10진수로 나타냅니다. 마이너스 기호 (U+002D)로 시작할 수 있습니다. 소수의 접두사 . (U+002E)을 가질 수 있습니다. 10의 지수의 접두사 e(U+0065) 혹은 E (U+0045)와 선택으로 + (U+002B) 혹은 – (U+002D)를 가질 수 있습니다. 숫자( digits)는 코드 포인트 U+0030와 U+0039사이를 말합니다.

Figure 4 - 숫자

(Infinity나 NaN 같은) 연속된 숫자로 표현할 수 없는 숫자 값은 허용하지 않습니다.

9 문자열

문자열은 인용 부호(U+0022)로 감싸진 유니코드 코드 포인트의 시퀀스입니다.
모든 문자는 이스케이프 되어야하는 문자를 제외하고 인용 부호 내에 배치될 수 있습니다: 인용 부호 (U+0022), 그리고 컨트롤 문자 U+0000부터 U+001F까지 입니다. 몇 문자는 두문자 이스케이프 시퀀스로 표현할 수 있습니다.

\" represents the quotation mark character (U+0022).

\\ represents the reverse solidus character (U+005C).

\/ represents the solidus character (U+002F).

\b represents the backspace character (U+0008).

\f represents the form feed character (U+000C).

\n represents the line feed character (U+000A).

\r represents the carriage return character (U+000D).

\t represents the character tabulation character (U+0009).

예를 들어, 문자열에 포함된 단일 역슬래시 문자만 표현하고 싶다면 "\\"와 같이 작성하면 됩니다.

코드 포인트의 종류와 상관없이 모든 문자는 16진수 숫자로 표현합니다. 그런 숫자의 의미는 ISO/IEC 10646에 의해 확정합니다. 만약 코드 포인트가 Basic Multilingual Plane(U+0000 through U+FFFF)에 속해있다면, 여섯 개의 문자 시퀀스로 나타낼 수도 있습니다: 역 슬래시, 소문자 u, 그 뒤로 이어지는 코드 포인트로 인코딩되는 네 개의 16진수 숫자입니다. 16진수 숫자는 숫자 (U+0030 through U+0039) 혹은 16진수 글자 A 부터 F까지 대문자(U+0041 through U+0046)나 소문자(U+0061 through U+0066)를 사용할 수 있습니다. 예를 들면, 문자열은 하나의 역슬래시 문자를 이렇게 표현할 수 있습니다. "\u005C"

아래 네 케이스는 같은 결과를 냅니다:

"\u002F"

"\u002f"

"\/"

"/"

코드 포인트 이스케이프는 Basic Multilingual Plane에 포함되지 않으며, 문자는 twelvecharacter 시퀀스로 나타내며, UTF-16 서로게이트 페어로 인코딩합니다. 예를 들어, G clef 문자(U+1D11E)를 포함하는 문자열을 이렇게 표현할 수 있습니다. "\uD834\uDD1E".

Figure 5 - 문자열