JSON

JSON(제이슨; JavaScript Object Notation)은 속성-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 비동기 브라우저/서버 통신 (AJAX)을 위해, 넓게는 XML(AJAX가 사용)을 대체하는 주요 데이터 포맷이다. 특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다.

자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합하다. 사람도 이해하기 쉽고 기계도 이해하기 쉬우면서 데이터의 용량이 작다. 이런 이유로 최근에는 JSON이 XML을 대체해서 설정의 저장이나 데이터를 전송등에 많이 사용된다

본래는 자바스크립트 언어로부터 파생되어 자바스크립트의 구문 형식을 따르지만 언어 독립형 데이터 포맷이다. 즉, 프로그래밍 언어나 플랫폼에 독립적이므로, 구문 분석 및 JSON 데이터 생성을 위한 코드는 C, C++, C#, 자바, 자바스크립트, 펄, 파이썬 등 수많은 프로그래밍 언어에서 쉽게 이용할 수 있다.

JSON 포맷은 본래 더글라스 크록포드가 규정하였다. RFC 7159와 ECMA-404라는 두 개의 경쟁 표준에 의해 기술되고 있다. ECMA 표준은 문법만 정의할 정도로 최소한으로만 정의되어 있는 반면 RFC는 시맨틱, 보안적 고려 사항을 일부 제공하기도 한다. JSON의 공식 인터넷 미디어 타입은 application/json이며, JSON의 파일 확장자는 .json이다.

기본문법

  • object 는 중괄호를 이용해서 감싸고 있다. '{}'
  • name은 string 으로 되어 있고 name 에 한 쌍으로 콜론 ':' 을 두고 value 가 온다.
  • value는 큰따옴표안에 string, number ,true ,false , null, object ,array 이 올 수 있다.
  • 배열은 대괄호로 감싼다. '[]'
  • 배열의 값들은 ',' (comma)로 구분한다.
{
    "member": [
        {
            "id": "hyunc87",
            "blog": "tistory",
            "from": "korea",
            "memo": "HelloWorld"
        },
        {
            "id": "abcd",
            "blog": "tistory.com",
            "from": "korea",
            "memo": "HelloWorld2"
        }
    ]
}

단점

유연함이 문제가 될 수 있다. 보내는 자료에 대한 제약이 없기 때문에, AJAX 는 단순히 데이터만이 아니라 javascript 그 자체도 전달할 수 있다. 무슨 말이냐면 json데이터라고 해서 받았는데 그게 단순 데이터가 아니라 자바스크립트가 될 수도 있고, 그게 실행 될 수 있다는 것이다.

데이터인 줄 알고 받았는데 악성 스크립트!!

JSON 관련 라이브러리를 따로 사용하는 이유가 이것이다. 받은 내용에서 순수하게 데이터만 추출하기 위한 라이브러리이다.

또 다른 JSON의 한계는 JSON으로 가져올 수 있는 데이터는 해당 자바스크립트가 로드된 서버의 것에 한정된다는 것이다.

참조

역링크