차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.


이전 판
tech:json [2017/08/23 10:05] (현재) – [단점] V_L
줄 1: 줄 1:
 +{{tag>json}}
 +====== JSON ======
 +JSON(제이슨; JavaScript Object Notation)은 속성-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 비동기 브라우저/서버 통신 (AJAX)을 위해, 넓게는 XML(AJAX가 사용)을 대체하는 주요 데이터 포맷이다. 특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다. 
  
 +자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합하다. 사람도 이해하기 쉽고 기계도 이해하기 쉬우면서 데이터의 용량이 작다. 이런 이유로 최근에는 JSON이 XML을 대체해서 설정의 저장이나 데이터를 전송등에 많이 사용된다
 +
 +본래는 자바스크립트 언어로부터 파생되어 자바스크립트의 구문 형식을 따르지만 언어 독립형 데이터 포맷이다. 즉, 프로그래밍 언어나 플랫폼에 독립적이므로, 구문 분석 및 JSON 데이터 생성을 위한 코드는 C, C++, C#, [[tech:java|자바]], [[tech:javascript|자바스크립트]], 펄, [[tech:python|파이썬]] 등 수많은 프로그래밍 언어에서 쉽게 이용할 수 있다.
 +
 +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)로 구분한다.
 +
 +
 +<file json 예>
 +{
 +    "member": [
 +        {
 +            "id": "hyunc87",
 +            "blog": "tistory",
 +            "from": "korea",
 +            "memo": "HelloWorld"
 +        },
 +        {
 +            "id": "abcd",
 +            "blog": "tistory.com",
 +            "from": "korea",
 +            "memo": "HelloWorld2"
 +        }
 +    ]
 +}
 +</file>
 +=====단점=====
 +유연함이 문제가 될 수 있다. 보내는 자료에 대한 제약이 없기 때문에,  AJAX 는 단순히 데이터만이 아니라 javascript 그 자체도 전달할 수 있다. 무슨 말이냐면 json데이터라고 해서 받았는데 그게 단순 데이터가 아니라 자바스크립트가 될 수도 있고, 그게 실행 될 수 있다는 것이다.
 +
 +>데이터인 줄 알고 받았는데 악성 스크립트!!
 +
 +JSON 관련 라이브러리를 따로 사용하는 이유가 이것이다. 받은 내용에서 순수하게 데이터만 추출하기 위한 라이브러리이다.
 +
 +또 다른 JSON의 한계는 JSON으로 가져올 수 있는 데이터는 해당 자바스크립트가 로드된 서버의 것에 한정된다는 것이다.  
 +    
 +=====참조=====
 +
 +  * http://json.org/json-ko.html
 +  * [[json php]]참조