JSON(제이슨[1], JavaScript Object Notation)은 속성-값 쌍(attribute–value pairs), 배열 자료형(array data types) 또는 기타 모든 시리얼화 가능한 값(serializable value) 또는 키-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 비동기 브라우저/서버 통신 (AJAX)을 위해, 넓게는 XML(AJAX가 사용)을 대체하는 주요 데이터 포맷이다. 특히 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다. 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합하다.
JSON 포맷은 본래 더글라스 크록포드가 규정하였다. RFC 7159와 ECMA-404 그리고 ISO/IEC 21778:2017[2] 표준에 의해 기술되고 있다. KS 부합화 표준은 아직 제정되지 않았으며, TTA 협회 표준명은 TTAE.OT-10.0394이다. ECMA 표준과 ISO/IEC 표준은 문법만 정의할 정도로 최소한으로만 정의되어 있는 반면 RFC는 시맨틱, 보안적 고려 사항을 일부 제공한다.[3] JSON의 공식 인터넷 미디어 타입은 application/json이며, JSON의 파일 확장자는 .json이다.
역사
야후 건물의 더글라스 크록포드(2007년)
JSON은 2000년대 초에 널리 사용된 방식인 플래시나 자바 애플릿 등의 브라우저 플러그인을 사용하지 않는 무상태, 실시간 서버 대 브라우저 통신 프로토콜의 요구에 의거하여 성장하였다.[4]
더글라스 크록포드가 처음으로 JSON 포맷을 정의하고 보급하였다.[5] 이 두문자어는 2001년 3월 크록포드 등이 공동 설립한 기업인 스테이트 소프트웨어(State Software)에서 기원하였다. 이 공동 설립자들은 표준 브라우저 기능을 사용하였던 시스템을 빌드하기로 합의하였고 2개의 하이퍼텍스트 전송 프로토콜(HTTP) 연결을 개방시키고 추가 데이터 교환이 없으면 표준 브라우저 타임아웃 전에 이것들을 재활용함으로써 웹 서버에 영속적인 반이중 통신을 지원하는, 상태를 인지하는(stateful) 웹 애프리케이션 개발을 위해 웹 개발자들을 위한 추상화 계층을 제공하였다. 이 공동 설립자들은 원탁 회의에 참여하였고 데이터 포맷을 JSML으로 부를지, JSON으로 부를지 투표를 했으며, 어떠한 라이선스 형태로 배포할 것인지도 논의하였다. 크록포드는 기업 법률가와 지나치게 규칙을 찾는 사람들을 조롱하고자 JSON 라이선스에다 "소프트웨어는 선을 위해 쓰여야 하며, 악을 위해 쓰여서는 안 된다"는 조항을 하나 추가하였다. 칩 모닝스타는 스테이트 소프트웨어에서 스테이트 애플리케이션 프레임워크의 아이디어를 냈다.[6][7] 한편, 이 조항으로 인해 JSON의 라이선스 호환성 문제가 다른 오픈 소스 라이선스와 불거지게 되었다.[8]
JSON 라이브러리의 전신은 카툰 네트워크의 Communities.com라는 이름의 아동용 디지털 자산 트레이딩 게임 프로젝트에 사용되었으며, DHTML 요소(이 시스템은 3DO 소유이기도 했음)를 조작하기 위한 사유 메시지 포맷과 더불어 브라우저 사이드 플러그인을 사용하였다. 초기 Ajax의 기능을 발견한 digiGroups, Noosh 등은 프레임을 사용하여 웹 애플리케이션의 시각 컨텍스트를 새로 고치지 않은 채 정보를 사용자 브라우저의 시각 필드로 전달했으며, 이로써 넷스케이프 4.0.5+, IE 5+의 표준 HTTP, HTML, 자바스크립트 기능만을 사용하여 실시간 리치 웹 애플리케이션을 실현시켰다. 이때 크로포드는 자바스크립트가 이러한 시스템을 위한 객체 지향 메시지 포맷으로 사용될 수 있음을 발견하였다. 이 시스템은 썬 마이크로시스템즈, 아마존닷컴, EDS로 판매되었다. JSON.org[9] 웹사이트는 2002년 런칭되었다. 2005년 12월, 야후!는 JSON으로 자사의 웹 서비스를 제공하기 시작했다.[10]
JSON은 자바스크립트 스크립트 언어의 서브셋에 기반을 두었다. (구체적으로는 표준 ECMA-262 제3판—1999년 12월[11]) 그리고 자바스크립트와 함께 흔히 사용되었으나 언어 독립적인 데이터 포맷이기도 했다. JSON 데이터의 구문 분석 및 생성을 위한 코드는 수많은 프로그래밍 언어에서 쉽게 볼 수 있다. JSON의 웹사이트는 언어별로 JSON 라이브러리를 나열한다.
자바스크립트의 문법을 채용했기 때문에 자바스크립트에서 eval 명령으로 곧바로 사용할 수 있다. 이런 특성은 자바스크립트를 자주 사용하는 웹 환경에서 유리하다. 그러나 실질적으로 eval 명령을 사용하면 외부에서 악성 코드가 유입될 수 있다. 모질라 파이어폭스 3.5, 인터넷 익스플로러 8, 오페라 10.5, 사파리, 구글 크롬 등 대부분의 최신 웹 브라우저는 JSON 전용 파서 기능을 내장하고 있으므로 이런 기능을 사용하는 것이 더 안전할 뿐만 아니라 빠른 방법이다.
“Unofficial Java History”. 《Edu4Java》. 26 May 2014. 26 May 2014에 원본 문서에서 보존된 문서. 30 August 2019에 확인함. In 1996, Macromedia launches Flash technology which occupies the space left by Java and ActiveX, becoming the de facto standard for animation on the client side.
Crockford, Douglas (2009년 5월 28일). “Introducing JSON”. json.org. 2009년 7월 3일에 확인함. It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999.