4 분 소요

리터럴 (literal)

리터럴은 값 그 자체를 의미한다.

5    -> 숫자 리터럴
"literal"   -> 문자열 리터럴
true    -> 불리언 리터럴
  • 변수(variable)는 데이터를 저장할 수 있는 메모리 공간을 의미하며, 변수의 값이 변경될 수 있다.

주석

JSON에는 서로 다른 프로그래밍 언어나 시스템 간의 데이터 교환을 위해 주석을 되도록 사용하지 않는다고 한다. 반드시 주석을 사용해야 하는 경우, JSON 데이터 파싱 전에 주석을 제거해야 한다고 한다.

JSON의 구조

  • JSON 데이터는 이름과 값의 쌍으로 이루어진다. ⇒ 이 때 이름과 값의 쌍을 프로퍼티(property)라 한다.
  • JSON 데이터는 쉼표(,)로 나열된다.
  • 객체(object)는 중괄호 ( {} )로 둘러쌓아서 표현한다. 하나 이상의 정렬되지 않은 프로퍼티의 집합으로, 객체, 즉 중괄호 안에 여러 프로퍼티가 존재한다.
  • 배열(array)은 대괄호 ( [] ) 로 둘러쌓아서 표현한다.

데이터

JSON 데이터를 쓰는 문법은 다음과 같다.

"데이터이름": 
"name": "제이슨"

JSON에서는 큰따옴표(””)만 사용하고 작은따옴표(’’)는 사용하지 않는다.

데이터의 자료형에는 숫자, 문자열 등 다양하게 있으며, 뒤에서 더 자세히 다룬다.

객체

JSON에서는 객체를 중괄호로 둘러쌓아 표현한다. 또한 객체 내에서 쉼표를 이용하여 여러 개의 프로퍼티를 하나의 객체 내에 포함시킬 수 있다.

{
	"name": "제이슨",
	"age": 24,
	"job": "공무원",
	"pi": 3.14
}

배열

JSON 배열은 대괄호로 둘러쌓아 표현한다. 또한 배열에서도 쉼표를 이용하여 데이터 여러 개를 포함시킬 수 있다.

"userdata": [
	{"name": "제이슨", "age": 24, "job": "공무원", "pi": 3.14},
	{"name": "데이타", "age": 30, "job": "데이터 분석가", "pi": 3.14},
	{"name": "독타", "age": 43, "job": "의사", "pi": 3.14}
]

데이터 자료형 (data type)

JSON에서 존재하는 데이터 자료형에는 다음이 있다.

  • 숫자 (number)
  • 문자 (string)
  • 불리언 (boolean)
  • 객체 (object)
  • 배열 (array)
  • null

숫자 (number)

JSON에서는 정수, 실수, 지수를 지원하나, 8진법 등을 표현하는 자료형은 없다. JSON에서 사용되는 정수, 실수, 지수는 실제 수학에서 쓰이는 개념과 다를 바 없다.

정수 (integer)

다음은 정수를 데이터로 가지는 예제이다.

{
	"age": 23
}

“age”는 정수라는 자료형의 데이터를 가진다고 볼 수 있다.

실수 (fraction)

다음은 실수를 데이터로 가지는 예제이다.

{
	"weight": 70.4
}

지수 (exponent)

JSON에서는 매우 큰 수나 작은 수를 표현할 때 e 표기법을 이용하여 지수로 표현 가능하다.

{
	"boltzmannjk": 1.38e-23
}

문자열 (string)

JSON에서는 문자열을 나타낼 때 큰따옴표(””) 안에 유니코드 문자들을 나열하여 구성한다.

{
	"name": "제이슨"
}

JSON에서는 특정 기능을 수행하는 이스케이프 시퀀스(escape sequence)를 지원하여 역슬래시() 문자가 특정 문자와 함께 쓰일 수 있다.

이스케이프 시퀀스(escape sequence)

이스케이프 시퀀스 (또는 확장열이라고도 불림)는 문자열이 화면에 출력될 때 특정 기능을 수행하도록 사용되는 일련의 문자열으로, 제어 시퀀스(control sequence)라고도 한다. 이스케이프 문자는 이스케이프 시퀀스를 따르는 문자들로, 역슬래시()를 이용하여 역슬래시 다음 문자가 특정 기능을 수행하는 특수 문자임을 알린다.

JSON에서 사용할 수 있는 이스케이프 시퀀스는 다음이 있다.

이스케이프 시퀀스 기능
\b 백스페이스
\f 폼 피드 (form feed)
\n 개행
\r 캐리지 리턴 (carriage return)
\t 탭 (tab)
\” 큰따옴표 자체를 나타낼 때 사용
\/ 슬래시 자체를 나타낼 때 사용
\ 역슬래시 자체를 나타낼 때 사용
\uHHHH 16진수 네 자리로 표현된 유니코드 문자
{
	"introducing": "제 이름은 \"제이슨\"이라고 합니다."
}

JSON 파서(parser)는 먼저 JSON 데이터를 모두 읽어 들인다. 이 때 위 예제에서 역슬래시를 뺐다면 JSON 파서는 “제 이름은 “ 까지만 문자열이라고 인식하므로 오류를 발생시킨다. 따라서 문자열 내에서 큰 따옴표나 역슬래시 등의 문자 자체를 나타내고 싶다면 이스케이프 시퀀스를 이용해야 한다.

불리언 (boolean)

참 (true)과 거짓 (false)을 표현한다.

다른 어떤 프로그래밍 언어에서는 true 값을 1, false 값을 0으로 대신 사용 가능하며, 대소문자 구분 없이 True, TRUE 등으로 쓸 수 있는 언어도 존재한다.

그러나 JSON에서 불리언 값은 항상 소문자 true, false로만 표기할 수 있다.

{
	"myroomswitch": true,
	"mycomputerswitch": false
}

객체 (object)

JSON에서의 객체는 데이터 이름과 값의 한 쌍으로 구성된 프로퍼티의 정렬되지 않은 집합을 의미한다. (정렬되지 않은 프로퍼티란 말은 객체 내에 존재하는 프로퍼티가 꼭 어떤 특정 기준으로 정렬되지 않아도 된다는 뜻인 것 같다)

JSON 객체에 여러 프로퍼티를 가지기 위해 쉼표를 이용하면 된다. 이 때 프로퍼티의 순서는 중요치 않으며, 데이터의 이름은 문자열로 반드시 큰따옴표를 사용해야만 한다.

{
	"name": "제이슨",
	"age": 24,
	"job": "공무원",
	"pi": 3.14
}

위 예제에서 “name”: “제이슨” 등의 데이터가 각각 하나의 프로퍼티이며, 이러한 여러 프로퍼티가 쉼표로 구분되어 객체 안 ({} 중괄호 안)에 존재함을 알 수 있다.

객체 안의 객체

객체도 JSON에서의 데이터 종류 중 하나이므로 JSON에서 프로퍼티의 값으로 객체 자체가 올 수도 있다. 이렇게 데이터 값이 객체라면 객체 안에 객체가 포함되는 계층 구조가 형성된다.

{
	"user": {
			"name": "제이슨",
			"age": 24,
			"job": "공무원",
			"pi": 3.14,
			"otherProfile": {
					"home": "서울시",
					"phone": "01011112222"
			}
	}
}

위 예제에서 가장 상위 계층의 데이터 이름은 “user”이고, 데이터값으로 다섯 개를 가지고 있다. 그 중 “otherProfile”이란 데이터는 “home”, “phone”을 데이터로 갖는 또 다른 객체임을 알 수 있다.

배열 (array)

JSON에서 배열은 여러 개의 데이터가 순서대로 나열된 집합을 의미한다. JSON 배열은 JSON에서의 모든 자료형들을 저장할 수 있다. (객체와 배열 자체도)

배열은 객체와 마찬가지로 쉼표를 이용하여 여러 데이터를 나열할 수 있으나, 객체에서는 프로퍼티를 나열하고, 배열에서는 데이터 값만을 나열한다는 차이점이 있다.

{
	"job": [
			"공무원",
			"프로그래머",
			"작가"
	]
}

JSON에서 배열의 인덱스는 0부터 시작한다. 위 예제에서 “공무원”은 0, “프로그래머”는 1, “작가”는 2의 인덱스를 가진다.

배열과 객체의 차이점

배열과 객체는 여러 데이터를 묶어놓은 집합이라는 점에서는 비슷하나, 객체는 프로퍼티의 집합이고 배열은 데이터값의 집합이라는 다른 점이 존재한다.

null

JSON에서 null은 빈 값을 의미하며, JSON에서는 null이라고 소문자로 표기한다.

{
		"name": "제이슨",
		"age": null
}

null은 값을 가지고 있지 않다는 의미를 가지는 하나의 데이터값이라 할 수 있다. 마치 숫자 0처럼. 숫자 0은 말 그대로 없다는 뜻이지만 0 그 자체로도 어떤 값이 될 수 있으니까.


References

[1] JSON

코딩교육 티씨피스쿨

[2] 이스케이프 시퀀스, 위키백과

이스케이프 시퀀스 - 위키백과, 우리 모두의 백과사전

[3] 이스케이프 문자, 위키백과

이스케이프 문자 - 위키백과, 우리 모두의 백과사전

This content is licensed under CC BY-NC 4.0

댓글남기기