JSON을 배우기 위한 사전 지식
JSON은 자바스크립트를 기반으로 만들어졌습니다.
따라서 JSON을 배우기 전에 여러분은 자바스크립트에 대한 기초 지식이 있으면 좋습니다.
● JSON이란?
JSON은 JavaScript Object Notation의 약자입니다.
JSON은 사람이 읽을 수 있는 텍스트 기반의 데이터 교환 표준입니다.
이러한 JSON은 XML의 대안으로서 좀 더 쉽게 데이터를 교환하고 저장하기 위하여 고안되었습니다.
또한, JSON은 텍스트 기반이므로 어떠한 프로그래밍 언어에서도 JSON 데이터를 읽고 사용할 수 있습니다.
● JSON의 특징
JSON은 다음과 같은 특징을 가집니다.
1. JSON은 자바스크립트를 확장하여 만들어졌습니다.
2. JSON은 자바스크립트 객체 표기법을 따릅니다.
3. JSON은 사람과 기계가 모두 읽기 편하도록 고안되었습니다.
4. JSON은 프로그래밍 언어와 운영체제에 독립적입니다.
● JSON 문법
JSON은 자바스크립트의 객체 표기법에서 리터럴(literal)과 프로퍼티(property)를 표현하는 방법만 가져와서 사용합니다.
따라서 JSON 데이터는 모양과 규칙이 매우 단순합니다.
그로 인해 브라우저 영역에서도 쉽고 빠르게 그 의미를 해석할 수 있으며, 다른 프로그래밍 언어에서도 구현하기 쉽습니다.
▶리터럴(literal)
리터럴(literal)은 변수와 다르게 해석되는 값 그 자체를 의미합니다.
다음 예제에서 등장하는 값은 모두 리터럴입니다.
예제
12 // 숫자 리터럴
"JSON" // 문자열 리터럴
true // 불리언 리터럴
변수(variable)란 데이터(data)를 저장할 수 있는 메모리 공간을 의미하며, 그 값이 변경될 수 있습니다. |
▶객체(object)
객체(object)란 실생활에서 우리가 인식할 수 있는 사물로 이해할 수 있습니다.
JSON에서 객체란 이름(name)과 값(value)으로 구성된 프로퍼티(property)의 정렬되지 않은 집합입니다.
다음 예제는 이름과 값으로 이루어진 네 쌍의 프로퍼티를 가지는 "강아지" 객체를 나타내는 예제입니다.
예제
{
"name": "식빵",
"family": "웰시코기",
"age": 1,
"weight": 2.14
}
● JSON 구조
JSON은 자바스크립트의 객체 표기법으로부터 파생된 부분 집합입니다.
따라서 JSON 데이터는 다음과 같은 자바스크립트 객체 표기법에 따른 구조로 구성됩니다.
1. JSON 데이터는 이름과 값의 쌍으로 이루어집니다.
2. JSON 데이터는 쉼표(,)로 나열됩니다.
3. 객체(object)는 중괄호({})로 둘러쌓아 표현합니다.
4. 배열(array)은 대괄호([])로 둘러쌓아 표현합니다.
▶JSON 데이터
JSON 데이터는 이름과 값의 쌍으로 구성됩니다.
이러한 JSON 데이터는 데이터 이름, 콜론(:), 값의 순서로 구성됩니다.
문법
"데이터이름": 값
다음 예제는 데이터의 이름이 "name"이고, 값은 "식빵"이라는 문자열을 갖는 JSON 데이터의 예제입니다.
예제
"name": "식빵"
데이터의 이름도 문자열이므로, 항상 큰따옴표("")와 함께 입력해야 합니다.
데이터의 값으로는 다음과 같은 타입이 올 수 있습니다.
1. 숫자(number)
2. 문자열(string)
3. 불리언(boolean)
4. 객체(object)
5. 배열(array)
6. NULL
▶JSON 객체
JSON 객체는 중괄호({})로 둘러쌓아 표현합니다.
또한, JSON 객체는 쉼표(,)를 사용하여 여러 프로퍼티를 포함할 수 있습니다.
예제
{
"name": "식빵",
"family": "웰시코기",
"age": 1,
"weight": 2.14
}
JSON 객체를 그림으로 나타내면 다음과 같습니다.
▶JSON 배열
JSON 배열은 대괄호([])로 둘러쌓아 표현합니다.
또한, JSON 배열은 쉼표(,)를 사용하여 여러 JSON 데이터를 포함할 수 있습니다.
다음 예제는 배열의 이름이 "dog"이고, 3개의 JSON 객체를 요소로 가지는 JSON 배열의 예제입니다.
예제
"dog": [
{"name": "식빵", "family": "웰시코기", "age": 1, "weight": 2.14},
{"name": "콩콩", "family": "포메라니안", "age": 3, "weight": 2.5},
{"name": "젤리", "family": "푸들", "age": 7, "weight": 3.1}
]
JSON 배열을 그림으로 나타내면 다음과 같습니다.
● 타입(datatype)
JSON에서는 데이터의 값으로 사용할 수 있는 다양한 타입을 제공하고 있습니다.
JSON에서 제공하는 기본 타입은 다음과 같습니다.
1. 숫자(number)
2. 문자열(string)
3. 불리언(boolean)
4. 객체(object)
5. 배열(array)
6. null
1.숫자(number)
JSON에서 나타낼 수 있는 숫자의 종류는 다음과 같습니다.
1. 정수(integer)
2. 실수(fraction)
3. 지수(exponent)
JSON에서는 8진수나 16진수 등을 표현하는 방법은 제공하지 않습니다.
① 정수(integer)
JSON에서 정수는 부호를 가지는 소수 부분이 없는 수를 의미합니다.
예제
{
"age": 1
}
② 실수(fraction)
JSON에서 실수는 소수 부분을 가지는 수를 의미합니다.
예제
{
"weight": 2.14
}
③ 지수(exponent)
JSON에서는 매우 큰 수나 매우 작은 수를 표현할 때 e 표기법을 사용하여 지수로 표현할 수 있습니다.
예제
{
"size": 5.8426e+2
}
2.문자열
JSON에서 문자열(string)이란 일련의 연속된 문자의 집합을 의미합니다.
이러한 문자열은 큰따옴표("") 안에 유니코드 문자들의 나열로 구성됩니다.
JSON에서 역슬래시(\) 문자는 특정 문자와 함께 사용되어 이스케이프 시퀀스(escape sequence)로 사용됩니다.
따라서 JSON 문자열에는 역슬래시(\)와 큰따옴표(")를 바로 사용할 수 없으며, 이스케이프 시퀀스로 표현해야 합니다.
예제
{
"name": "식빵"
}
*이스케이프 시퀀스(escape sequence)
이스케이프 시퀀스(escape sequence)는 문자열이 화면에 출력될 때 사용하게 될 특수한 문자를 위해 만들어졌습니다.
이러한 이스케이프 시퀀스는 역슬래시(\)와 특정 문자와의 조합으로 사용할 수 있습니다.
JSON에서 사용할 수 있는 이스케이프 시퀀스는 다음과 같습니다.
다음 예제는 JSON 문자열에서 큰따옴표를 표현하기 위해 이스케이프 시퀀스를 사용하는 예제입니다.
예제
{
"comment": "안녕하세요. \"식빵\" 입니다."
}
JSON 파서(parser)는 우선 JSON 데이터를 모두 읽어 들입니다.
위의 예제처럼 큰따옴표를 이스케이프 시퀀스(\")로 표현하지 않았다면, 식빵이라는 문자열 앞에 있는 큰따옴표에서 문자열이 모두 끝났다고 인식할 것입니다.
따라서 JSON 파서는 오류를 발생시킬 것입니다.
이처럼 문자열 내에서 큰따옴표나 역슬래시를 표현하기 위해서는 반드시 이스케이프 시퀀스를 사용하여 JSON 파서에 해당 따옴표는 문자열을 끝내는 따옴표가 아니라는 사실을 알려주어야만 합니다.
3.불리언(boolean)
JSON에서 불리언 값은 참(true)과 거짓(false)을 표현합니다.
일부 다른 프로그래밍 언어에서는 true 값으로 1을, false 값으로 0을 대신 사용할 수 있습니다.
또한, 대소문자의 구분 없이 True, TRUE, False, FALSE 등을 모두 사용할 수 있는 언어도 존재합니다.
하지만 JSON에서 불리언 값은 항상 true와 false를 소문자로 표기해서 사용해야 합니다.
예제
{
"name": "식빵",
"lunch": true
}
4.객체(object)
JSON에서 객체(object)란 데이터 이름과 값의 한 쌍으로 구성된 프로퍼티의 정렬되지 않은 집합을 의미합니다.
이러한 JSON 객체는 중괄호({})로 둘러싸여 있습니다.
객체에 저장되는 프로퍼티(property)는 데이터 이름과 값의 한 쌍으로 이루어져 있습니다.
JSON 객체는 쉼표(,)를 사용하여 이러한 프로퍼티를 여러 개 가질 수 있습니다.
이때 프로퍼티의 순서는 중요하지 않으며, 데이터의 이름은 문자열로 반드시 큰따옴표("")를 사용해야 합니다.
예제
{
"name": "식빵",
"family": "웰시코기",
"age": 1,
"weight": 2.14
}
★객체 안의 객체
JSON에서 데이터 이름과 대응되는 값으로 숫자, 문자열, 불리언뿐만 아니라 또 다른 객체가 올 수도 있습니다.
만약 데이터의 값이 객체라면 객체 안에 객체가 포함되는 계층 구조가 형성됩니다.
예제
{
"dog": {
"name": "식빵",
"family": "웰시코기",
"age": 1,
"weight": 2.14,
"owner": {
"ownerName": "홍길동",
"phone": "01012345678"
}
}
}
위의 예제에서 가장 상위 계층의 데이터 이름은 "dog"이며, 데이터값으로 다섯 개의 또 다른 데이터를 가지고 있습니다.
그중에서 다섯 번째 데이터인 "owner" 객체는 "ownerName"과 "phone"이라는 또 다른 데이터를 가지고 있습니다.
5.배열(array)
JSON에서 배열(array)이란 여러 개의 데이터가 순서를 가지고 나열된 집합을 의미합니다.
이러한 JSON 배열은 대괄호([])로 둘러싸여 있습니다.
JSON 배열은 쉼표(,)를 사용하여 여러 개의 데이터를 나열할 수 있습니다.
이 방식은 객체에서 프로퍼티를 나열하는 것과 비슷하지만, 배열은 데이터의 값만을 나열한다는 차이가 있습니다.
JSON 배열은 JSON에서 제공하는 기본 타입을 모두 저장할 수 있습니다.
다음 예제는 세 개의 문자열 요소를 가지는 "dog"라는 이름의 JSON 배열 예제입니다.
예제
{
"dog": [
"웰시코기",
"포메라니안",
"푸들"
]
}
JSON에서 배열의 인덱스는 언제나 0부터 시작 합니다.
따라서 위의 예제에서 "웰시코기"는 0, "포메라니안"은 1, "푸들"은 2의 인덱스를 가지게 됩니다.
배열과 객체의 차이점
JSON에서 배열과 객체는 여러 데이터를 묶어놓은 집합이라는 점에서 서로 비슷한 타입입니다.
하지만 객체는 프로퍼티의 집합이며, 배열은 데이터값의 집합이라는 차이가 있습니다.
예제
{
"dog": [
"웰시코기",
"포메라니안",
"푸들",
{
"ownerName": "홍길동",
"phone": "01012345678"
}
]
}
위의 예제에서 "dog"라는 이름의 JSON 배열은 문자열뿐만 아니라 객체도 요소로 가지고 있습니다.
대부분의 프로그래밍 언어에서 배열은 여러 타입의 데이터를 동시에 가질 수 없습니다.
하지만 자바스크립트 기반의 JSON 배열은 여러 타입의 배열 요소를 가질 수 있습니다.
6.null
JSON에서 null이란 아무런 값도 가지고 있지 않은 빈 값을 의미합니다.
JSON에서 이러한 null 값은 항상 null을 소문자로 표기해서 사용해야 합니다.
예제
{
"id": 1,
"name": null
}
*undefined와 null
null은 자바스크립트의 undefined 타입과 혼동하기 쉽습니다.
더군다나 JSON에서는 undefined 타입을 제공하지 않으므로, 더욱 유의해야 합니다.
자바스크립트에서 '값' 자체가 없다는 의미의 undefined 값은 초기화되지 않은 변수나 존재하지 않는 값에 접근할 때 반환합니다.
하지만 JSON에서 null이란 '값'을 가지고 있지 않다는 의미를 가지는 하나의 데이터값이라고 할 수 있습니다.
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
'springboot 수업일지' 카테고리의 다른 글
3일차(2) response응답 (0) | 2021.06.24 |
---|---|
3일차(1) FrontController패턴 (0) | 2021.06.24 |
2일차(3) 스프링프레임워크 개념 (0) | 2021.06.24 |
2일차(2) @RestController / @RequestBody (0) | 2021.06.24 |
2일차(1) HTTP 1.1 프로토콜(http 메서드) (0) | 2021.06.24 |