JSON (JavaScript Object Notation)
이전 포스팅에서 언급한 바와 같이
XML은 헤더와 태그 등의 여러 요소로 가독성이 비교적 떨어지고, XML 특성상 메모리 용량을 많이 소비하는 단점이 있어왔다. 이에 따라 각광을 받게 된 것이 간결하고 통일된 양식을 쓰는 JSON이다.
이제부터 JSON에 대해 알아보도록 하자.
JSON ( JavaScript Object Notation ) : 경량의 Data 교환 형식
- 사람이 읽을 수 있는 텍스트 기반의 데이터 교환 표준
- XML의 대안으로, 보다 쉽게 데이터를 교환 및 저장하기 위해 고안된 포맷
- 컴퓨터 프로그램의 변수 값을 표현하는 데 적합함
JSON의 가장 중요한 특징
JavaScript를 확장하여 만들었기에 JavaScript 객체 표기법을 따른다는 것과
언어 독립형 데이터 포맷이기 때문에 프로그래밍 언어 및 플랫폼에도 독립적이고
구문 분석 및 JSON 데이터 생성을 위한 코드를 C, C++, JAVA, Pearl, Python 등에서 쉽게 이용할 수 있다는 점이다.
- JSON 공식 인터넷 미디어 타입 : application/json
- JSON 파일 확장자 : .json
JSON 표준 등장 배경
- 2009년, 더글라스 크록포드에 의해 규정됨
- 현재 JSON은 2개의 경쟁 표준에 의거하여 규정되고 있다.
- RFC 7159 : 문법 및 보안에 관련된 사항 일부 제공
- ECMA-404 : 문법만 정의할 정도의 최소한의 정보만 정의
JSON의 문제점
- 문법 오류에 민감하여 구두점에서 오타가 나는 경우 JSON 파일이 손상된다.
- 주석을 지원하지 않기 때문에, 설정 파일을 JSON으로 작성하는 것은 어렵다.
- 데이터 타입 강제 불가이므로 데이터 스스로 자신의 타입을 기술할 수 없다.
JSON의 자료형과 문법
JSON 기본 구조
타입 |
형태 |
타 프로그래밍 언어와 비교 |
collection 타입 | Name/Value 형태의 쌍 |
object, record, struct, dictionary, hash table, 키가 있는 List, 연상배열 |
List | 값들의 순서화 | array, vector, list, sequence |
자료형
JSON의 자료형은 다음 6가지로 구분할 수 있다.
1. Number (수)
8진수와 16진수 형식을 사용하지 않음
C, Java에서의 Number 표현법과 비슷하다.
(예시)
- 정수 : 75, -254
- 실수(고정 소수점) : 3.14, -2.123
- 실수(부동 소수점) : 1e4, 3.4e+4 , 6.78E-5
2. String (문자열)
0개 이상의 유니코드 문자들의 조합
문자열은 큰 따옴표로 구분
역슬래쉬(\) escape 문법 지원
하나의 문자도 하나의 문자열로서 표현
Java 문자열과 매우 비슷함
(예시)
- "1234"
- "LOVE"
- "\"JSON\""
역슬래쉬로 제어문자 표현 시
- \b 백스페이스
- \f 폼 피드
- \n 개행
- \r 캐리지 리턴
- \t 탭
- \" 따옴표
- \/ 슬래시
- \\ 역슬래시
- \uHHHH 16진수 네자리로되어 있는 유니코드 문자
3. Boolean (참/거짓) : True or False
4. Array (배열)
0 이상의 임의의 종류 값으로 이루어진 순서가 있는 리스트
대괄호(Bracket)로 나타내며 요소는 쉼표(Comma)로 구분한다.
(예시)
- 1 [10, {"v": 20}, [30, "마흔"]]
5. Object (객체)
Name/Value 쌍들의 비순서화 SET
중괄호로 나타내며 Name 뒤에 콜론( : Colon)을 붙이고
콤마로 Name/Value 쌍들 간을 구분
Name(=Key)는 문자열이다.
(예시)
- {"name2": 50, "name3": "값3", "name1": true}
6. null : 빈 값으로, null을 사용
값 (Value)
큰 따옴표 안으로 string, number, true, false, null, object, array 자료형의 값이 들어올 수 있다.
※ tip : 토큰들의 어떤 쌍 사이에 공백 삽입 가능
JSON 예제 만들기
한 사람에 관한 정보를 가진 JSON 객체를 키(Name)-값(Value) 패턴으로 표현하여 만들어 보았다.
- 위와 같이 JSON을 사용할 때 객체 안에 객체를 넣을 수도 있기 때문에 XML처럼 복잡한 구조 또한 표현이 가능하다
- 또한 null의 존재로 알 수 있듯이 JSON은 JavaScript 이외의 언어에서 사용될 상황을 고려한 언어라고 볼 수 있다.
- JSON의 메시지 단위는 배열과 객체이다.
참고 :
http://tcpschool.com/json/json_intro_basic
https://ko.wikipedia.org/wiki/JSON
http://www.json.org/json-ko.html