JSON

Mixer·2022년 5월 24일
0
post-thumbnail

What is JSON?

JavaScript Object Notation의 약어이다
데이터 교환을 위해 만들어진 객체의 형태의 포맷

JSON 특징

  • JSON은 자바스크립트를 확장해 만들어졌다.
  • JSON은 자바스크립트 객체 표기법을 따른다.
  • JSON은 사람과 기계가 모두 읽기 편하게 고안되었다.
  • JSON은 프로그래밍 언어와 운영체제에 독립적이다.

JSON 구조

  • JSON 데이터는 이름과 값의 쌍을 이룬다
  • JSON 데이터는 쉼표(,)로 나열된다.
  • 객체는 중괄호({})로 둘러쌓아 표현한다
  • 배열은 대괄호([])로 둘러쌓아 표현한다

JSON 문법

JSON은 자바스크립트의 객체 표기법에서 리터럴과 프로퍼티를 표현하는 방법만 가져와 사용한다
따라서 JSON 데이터는 모양과 규칙이 매우 단순하다
그래서 브라우저 영역에서도 쉽고 빠르게 그 의미를 해석할 수 있으며, 다른 프로그래밍 언어에서도 구현하기 쉽다.

리터럴 (literal)

리터럴은 변수와 다르게 해석되는 값 그 자체를 의미한다

12 // 숫자 리터럴
"JSON" // 문자 리터럴
true // 불리언 리터럴

변수란 데이터를 저장할 수 있는 메모리 공간을 뜻하며, 그 값이 변경될 수 있다.

JSON 주석

JSON 창시자는 JSON에 주석이 들어가지 않는 것이 바르다고 규정하고 있다.
그것은 서로 다른 시스템 간의 연동과 호환성을 위한 조치였으며

반드시 주석을 사용해야 한다면, 주석이 포함된 JSON데이터를 파싱하기전 주석만을 먼저 제거해야 한다.
하지만 왠만하면 JSON엔 주석을 사용하지 않는 것이 좋다

JSON 데이터

JSON 데이터는 데이터 이름, 콜론(:), 값의 순서로 이루어진다.

"데이터이름":값

데이터의 이름도 문자열이니, 항상 큰따옴표("")와 함께 입력해야 한다.

👉🏼 데이터 값으로 다음과 같은 타입이 올 수 있다.

숫자 (JSON에선 8진수, 16진수 등 표현하는 방법은 제공하지 않는다.)

  • 정수
  • 실수
  • 지수 (5.145463e+2 / 매우 큰 수나 작은 수를 표현할 때, e표기법으로 나타낸다)

문자열

  • 이스케이프 시퀀스
    이스케이프 시퀀스는 문자열이 화면에 출력될 때 사용하게 될 특수한 문자를 위해 만들어졌다
    역슬래시(\)와 특정 문자와의 조합으로 사용이 가능하다
이스케이프 시퀀스설명
\b백스페이스
\f폼 피드(form feed)
\n개행
\r캐리지 리턴(carriage return)
\t탭(tab)
\"큰따옴표
\/슬래시
\\ 역슬래시
\uHHHH16진수 네 자리로 표현된 유니코드 문자
{
	"comment": "안녕하세요. \"민떠그\" 입니다."
}
JSON 문자열에서 큰따옴표를 표현하기 위해 이스케이프 시퀀스 사용하는 예

JSON 파서는 우선 JSON데이터를 모두 읽어 들인다.
예제처럼 큰따옴표를 이스케이프 시퀀스(\")로 표현하지 않는다면, 민떠그라는 문자열 앞에 있는 큰따옴표에서 문자열이 끝났다고 인식 할 것이다 그러면 오류를 발생 시킨다.

불리언

JSON에서 불리언 값은 참과 거짓을 표현한다
JSON에선 불리언 값은 항상 true와 false를 소문자로 표기해야한다

객체

객체란 실생활에서 우리가 인식할 수 있는 사물로 이해할 수 있다.
JSON에서 객체란 이름과 값으로 구성된 프로퍼티의 정렬되지 않은 집합이다

JSON에선 데이터 이름과 대응되는 값으로 숫자,문자열,불리언뿐 아니라 또 다른 객체가 올 수 있다.
만약 데이터의 값이 객체라면 객체 안에 객체가 포함되는 계층 구조가 형성된다.

{

"dog":{
	"name": "식빵",
    "family": "웰시코기",
    "age": 1,
    "weight": 2.14
    "owner":{       // 객체 안의 객체
    	"ownerName": "김민석",
        "phone": "01012345678"
    }
  }
}

예제에서 가장 상위 계층의 데이터 이름은 "dog"이며, 데이터값으로 다섯 개의 또 다른 데이터를 가지고 있다.
그중 다섯 번째 데이터인 "owner" 객체는 "ownerName"과 "phone"이라는 또 다른 데이터를 가지고 있다.

배열

JSON에서 배열이란 여러 개의 데이터가 순서를 가지고 나열된 집합을 말한다.
JSON 배열은 대괄호로 둘러 싸여있다.
이 역시 쉼표를 사용해 여러 개의 데이터를 나열할 수 있으며,
객체에서 프로퍼티를 나열하는 것과 비슷하지만, 배열은 데이터의 값만을 나열한다는 차이가 있다.

JSON 배열은 JSON에서 제공하는 기본 타입을 모두 저장할 수 있다.

{
"dog":[
	"진돗개",
    "푸들",
    "시츄"
}
자바와 동일하게 JSON에서의 배열의 인덱스는 0 부터 시작한다

JSON 배열

JSON 배열은 대괄호로 둘러쌓아 표현한다
JSON 배열 역시 쉼표를 사용하여 여러 JSON 데이터를 포함할 수 있다.

"dog": [
	{"name": "별이", "family": "웰시코기", "age": 1, "weight": 2.14}
    {"name": "달이", "family": "푸들", "age": 5, "weight": 2.5}
    {"name": "태양", "family": "시츄", "age": 7, "weight": 3.1}
]

배열과 객체의 차이점

JSON에서 배열과 객체는 여러 데이터를 묶어놓은 집합이라는 점에 서로 비슷한 타입이다.
하지만 객체는 프로퍼티의 집합이며, 배열은 데이터값의 집합이라는 차이

{
    "dog": [
        "웰시코기",
        "포메라니안",
        "푸들",
        {
            "ownerName": "민떠그",
            "phone": "01012345678"
        }
    ]
}
"dog"이라는 이름의 JSON 배열은 문자열뿐 아니라 객체도 요소로 가지고 있다.

자바스크립트 기반의 JSON 배열은 여러 타입의 배열 요소를 가질 수 있다.

NULL

JSON에서 NULL은 아무런 값도 가지고 있지 않은 빈 값을 말한다
null은 항상 null 소문자로 표기해 사용한다
undefined와 null

null은 자바스크립트의 undefined 타입과 혼동하기 쉽다.
JSON에서는 undefined 타입을 제공하지 않으므로, 더욱 유의해야한다

자바스크립트에서 '값' 자체가 없다는 의미의 undefined 값은 초기화되지 않은 변수나 존재하지 않는 값에 접근할 때 반환
하지만 JSON에서 null이란 '값'을 가지고 있지 않다는 의미를 가지는 하나의 데이터값이라고 할 수 있다.

JSON 객체

위에 설명한 것처럼 중괄호로 둘러쌓아 표현한다
또한, JSON 객체는 쉼표(,)를 사용해 여러 프로퍼티를 포함할 수 있다.
프로퍼티의 순서는 중요하지 않으며, 데이터 이름은 문자열로 해당되니 반드시 따옴표를 사용해야 한다.

{
	"name": "식빵",
    "family": "웰시코기",
    "age": 1,
    "weight": 2.14
}
profile
Minthug'life

0개의 댓글