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개의 경쟁 표준에 의거하여 규정되고 있다.
    1.  RFC 7159 : 문법 및 보안에 관련된 사항 일부 제공
    2.  ECMA-404 : 문법만 정의할 정도의 최소한의 정보만 정의

 

 JSON의 문제점 

  • 문법 오류에 민감하여 구두점에서 오타가 나는 경우 JSON 파일이 손상된다.
  • 주석을 지원하지 않기 때문에, 설정 파일을 JSON으로 작성하는 것은 어렵다.
  • 데이터 타입 강제 불가이므로 데이터 스스로 자신의 타입을 기술할 수 없다.

 

 

 JSON의 자료형과 문법 

 

JSON 기본 구조

 

 JSON 기본 구조 

 

타입

형태

타 프로그래밍 언어와 비교

collection 타입 Name/Value 형태의 쌍

object, record, struct, dictionary, hash table,

키가 있는 List, 연상배열

List 값들의 순서화 array, vector, list, sequence

 

 

 자료형  

JSON의 자료형은 다음 6가지로 구분할 수 있다.

 

 

1. Number (수)

 

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 자료형의 값이 들어올 수 있다.

 

Value 입력 값들. 양 쪽에 name tag가 존재한다.

 

 

※ tip : 토큰들의 어떤 쌍 사이에 공백 삽입 가능

출처 : json.org/json-ko.html

 

 

 

 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

https://namu.wiki/w/JSON

 

 

 

'Knowledge' 카테고리의 다른 글

파일 시스템  (0) 2019.09.06
Garbage Collection ( 쓰레기 수집 )  (0) 2019.09.06
XML (eXtensible Markup Language)  (0) 2019.09.01
비밀키 / 공개키  (0) 2019.08.31
하드웨어 / 미들웨어 / 소프트웨어  (0) 2019.08.30