이 글은 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을 넣을 수 있습니다.
6 객체
객체 구조는 중괄호 토큰의 쌍으로 감싸진 0개 혹은 그 이상의 이름(name)/값(value) 쌍으로 표현됩니다. 이름은 문자열(string)입니다. 단일 콜론 토큰은 각각 이름에 따라, 값을 이름과 구별합니다. 단일 콤마 토큰은 다음에 오는 이름과 값을 구분합니다.
7 배열
배열 구조는 대괄호 토큰의 쌍으로 감싸진 0개 혹은 그 이상의 값입니다. 값은 콤마로 구분합니다. 값의 순서는 중요합니다.
8 숫자
숫자는 불필요한 선두 0을 제외한 10진수로 나타냅니다. 마이너스 기호 (U+002D)로 시작할 수 있습니다. 소수의 접두사 . (U+002E)을 가질 수 있습니다. 10의 지수의 접두사 e(U+0065) 혹은 E (U+0045)와 선택으로 + (U+002B) 혹은 – (U+002D)를 가질 수 있습니다. 숫자( digits)는 코드 포인트 U+0030와 U+0039사이를 말합니다.
(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".