제이손
JSON![]() | |
파일 확장자 | .json |
---|---|
인터넷 매체 유형 | 어플/제이슨 |
타입코드 | 본문 |
UTI(Uniform Type Identifier) | 공공.json |
형식 유형 | 자료교환 |
에서 확장됨 | 자바스크립트 |
표준. | STD90( RFC8259), ECMA-404, ISO/IEC 21778:2017 |
오픈 포맷? | 네. |
웹사이트 | json |
JSON(JavaScript Object Notation, 발음 / ˈd ʒe ɪs ən/; / ˈd ʒe ɪˌs ɒn/)은 사람이 읽을 수 있는 텍스트를 사용하여 속성-값 쌍과 배열(또는 기타 직렬화 가능한 값)로 구성된 데이터 개체를 저장하고 전송하는 개방형 표준 파일 형식 및 데이터 교환 형식입니다.서버가 있는 웹 애플리케이션을 포함하여 전자 데이터 교환에 다양한 용도로 사용되는 일반적인 데이터 형식입니다.
JSON은 언어에 독립적인 데이터 형식입니다.자바스크립트에서 파생되었지만, 많은 현대 프로그래밍 언어들은 JSON 형식의 데이터를 생성하고 파싱하기 위한 코드를 포함하고 있습니다.JSON 파일 이름은 확장자를 사용합니다..json
.
Douglas Crockford는 원래 2000년대 초반에 JSON 포맷을 명시했습니다.[1]그와 칩 모닝스타는 2001년 4월에 첫번째 JSON 메시지를 보냈습니다.
작명과 발음
2017년 국제 표준(ECMA-404 및 ISO/IEC 21778:2017)은 "JSON"을 "Jason and The Argonauts"에서와 같이 / ˈd ɪe ə.s ʒn/로 발음한다"고 명시하고 있습니다.ECMA-404의 첫 번째(2013) 에디션은 발음을 다루지 않았습니다.[4]유닉스 및 리눅스 시스템 관리 핸드북에는 "JSON 포맷의 이름을 짓고 홍보한 더글라스 크록포드(Douglas Crockford)는 제이슨(Jason)이라는 이름처럼 발음된다고 말합니다.그런데 어찌된 일인지 기술계에서는 "제이쏘"가 더 흔해진 것 같습니다."[5]크록포드는 2011년에 "당신이 어떻게 그렇게 발음하는지에 대해 많은 논쟁이 있지만, 저는 엄밀하게 신경 쓰지 않습니다"라고 말했습니다.[6]
기준
2006년부터 RFC 4627이 "정보" 규격으로 제공된 이후, 2013년에 JSON이 ECMA-404로 최초로 표준화되었습니다.[7] 2017년에 발표된 RFC 8259는 인터넷 표준 STD 90의 현재 버전이며, ECMA-404와 일관성을 유지하고 있습니다.[8]같은 해 JSON도 ISO/IEC 21778:2017로 표준화되었습니다.[2]ECMA 및 ISO/IEC 표준은 허용되는 구문만을 설명하고 RFC는 일부 보안 및 상호운용성 고려사항을 다룹니다.[9]
역사

JSON은 2000년대 초반에 사용되었던 지배적인 방법인 Flash나 Java 애플릿과 같은 브라우저 플러그인을 사용하지 않고 실시간 서버 간 세션 통신 프로토콜에 대한 필요성에서 비롯되었습니다.[10]
크록포드는 먼저 JSON 포맷을 구체화하고 대중화했습니다.[11]이 두문자는 2001년 3월 크로포드 등이 공동 설립한 스테이트 소프트웨어(State Software)에서 유래했습니다.공동 설립자들은 표준 브라우저 기능을 사용하는 시스템을 구축하고 웹 개발자들이 두 개의 HTTP(Hypertext Transfer Protocol) 연결을 열어두고 표준 브라우저 타임아웃 전에 재활용함으로써 웹 서버에 대한 지속적인 이중 연결을 가진 상태 있는 웹 애플리케이션을 만드는 데 추상화 계층을 제공하는 데 동의했습니다.더 이상의 데이터는 교환되지 않았습니다.공동 창립자들은 원탁회의를 열고 데이터 형식을 JSML(JavaScript Markup Language) 또는 JSON(JavaScript Object Notation)이라고 부를지 여부와 이를 사용할 수 있는 라이센스 유형에 대해 투표했습니다.JSON.org 웹사이트는 2001년에 시작되었습니다.2005년 12월 야후는 JSON에서 웹 서비스의 일부를 제공하기 시작했습니다.[13]
JSON 라이브러리의 선구자는 카툰 네트워크를 위한 카툰 오빗(Communities.com )이라는 어린이 디지털 자산 거래 게임 프로젝트에 사용되었습니다.(주 공동 founders는 모두 이전에 이 회사에서 근무했습니다.)DHTML 요소(이 시스템도 3DO[citation needed] 소유)를 조작하기 위해 독점 메시징 형식을 가진 브라우저 측 플러그인을 사용했습니다.초기 Ajax 기능을 발견한 digiGroups, Noosh 등은 프레임을 사용하여 웹 애플리케이션의 시각적 컨텍스트를 새로 고치지 않고 사용자 브라우저의 시각적 필드에 정보를 전달하여 Netscape 4.0.5+ 및 IE 5+의 표준 HTTP, HTML 및 자바스크립트 기능만을 사용하여 실시간으로 풍부한 웹 애플리케이션을 구현했습니다.그 후 Crockford는 자바스크립트가 이러한 시스템의 객체 기반 메시징 형식으로 사용될 수 있다는 것을 발견했습니다.이 시스템은 Sun Microsystems, Amazon.com 및 EDS에 판매되었습니다.
JSON은 자바스크립트 스크립트 언어의 하위 집합(특히, Standard ECMA-262 3rd Edition - 1999년[14] 12월)을 기반으로 하며 자바스크립트와 함께 일반적으로 사용되지만 언어와는 독립적인 데이터 형식입니다.JSON 데이터를 파싱하고 생성하기 위한 코드는 많은 프로그래밍 언어에서 쉽게 사용할 수 있습니다.JSON의 웹사이트는 언어별로 JSON 라이브러리를 나열하고 있습니다.
2013년 10월, Ecma International은 JSON 표준 ECMA-404의 첫 번째 에디션을 발표했습니다.[7]같은 해, RFC 7158은 ECMA-404를 참조로 사용했습니다.2014년, RFC 7159는 RFC 4627과 RFC 7158을 대체하면서 JSON의 인터넷 사용에 대한 주요 참조가 되었습니다 (그러나 ECMA-262와 ECMA-404를 주요 참조로 유지).2017년 11월 ISO/IEC JTC 1/SC 22는 국제표준으로 ISO/IEC 21778:2017을[2] 발표하였습니다.2017년 12월 13일, 인터넷 엔지니어링 태스크 포스는 인터넷 표준 STD 90의 현재 버전인 RFC 8259를 발표하면서 RFC 7159를 폐지했습니다.[15][16]
Crockford는 JSON 라이선스에 "소프트웨어는 악이 아닌 선을 위해 사용되어야 한다"는 조항을 추가하여 기업 변호사와 지나치게 현학적인 사람들을 조롱하면서 JSON 라이브러리를 오픈 소스화했습니다.반면에, 이 조항은 오픈 소스 소프트웨어와 자유 소프트웨어는 대개 사용 목적에 대한 제한이 없기 때문에 JSON 라이선스의 다른 오픈 소스 라이선스와의 라이선스 호환성 문제를 야기했습니다.[17]
구문
다음 예제는 사용자를 설명하는 JSON 표현 가능성을 보여줍니다.
{ "first_name": 존, "last_name": 스미스, "is_alive": 진실의, "나이": 27, "주소": { "street_address": 212번가, "도시: 뉴욕, "상태": "NY", "postal_코드": "10021-3100" }, "phone_numbers": [ { "타입": "집", "숫자": "212 555-1234" }, { "타입": 사무실, "숫자": "646 555-4567" } ], "아이들": [ 캐서린, 토마스, 트레버 ], spouse: 귀무의 }
문자 부호화
Crockford는 원래 JSON이 자바스크립트와 ECMAscript의 엄격한 하위 집합이라고 주장했지만,[18] 그의 사양은 실제로 유효한 자바스크립트가 아닌 유효한 JSON 문서를 허용합니다; JSON은 유니코드 라인 터미네이터 U+2028 LINE SEPART와 U+2029 PRORT SEPART가 인용된 문자열에서 회피되지 않은 것처럼 보이도록 합니다.ECMAScript 2018 이상은 그렇지 않습니다.[19][20]이는 JSON이 "제어 문자"만 허용하지 않은 결과입니다.휴대성을 극대화하려면 이러한 문자는 백슬래시 이스케이프해야 합니다.
개방형 생태계에서의 JSON 교환은 UTF-8로 인코딩되어야 합니다.[8]인코딩은 기본 다국어 평면(U+0000 ~ U+FFFFF) 외부의 문자를 포함한 전체 유니코드 문자 집합을 지원합니다.그러나 탈출한 경우 UTF-16 대리 쌍을 사용하여 해당 문자를 작성해야 합니다.예를 들어, JSON에 이모지 문자 U+1F610 😐 NEutral FACE를 포함하려면:
{ "얼굴": "😐" } // 아니면 { "얼굴": "\uD83D\uDE10" }
JSON은 2019년 개정판부터 ECMA스크립트의 엄격한 하위 집합이 되었습니다.[20][21]
자료종류
JSON의 기본 데이터 유형은 다음과 같습니다.
- 숫자: 분수 부분을 포함할 수 있고 지수 E 표기를 사용할 수 있지만 NaN과 같은 숫자가 아닌 숫자는 포함할 수 없는 부호가 있는 십진수입니다.형식은 정수와 부동 소수점을 구분하지 않습니다.자바스크립트는 모든 숫자 값에 IEEE-754 이중 정밀 부동 소수점 형식을 사용하지만(나중에 BigInt도[22] 지원함) JSON을 구현하는 다른 언어들은 숫자를 다르게 인코딩할 수 있습니다.
- 문자열: 0개 이상의 유니코드 문자로 이루어진 시퀀스입니다.문자열은 큰따옴표로 구분되며 백슬래시 탈출 구문을 지원합니다.
- 부울(Boolean): 값 중 하나
true
아니면false
- 배열: 0개 이상의 원소를 순서대로 나열한 것으로, 각 원소는 어떤 종류의 원소도 될 수 있습니다.배열은 쉼표로 구분된 요소가 있는 대괄호 표기법을 사용합니다.
- Object: 이름(키라고도 함)이 문자열인 이름-값 쌍의 모음입니다.현재 ECMA 표준은 "JSON 구문은 이름으로 사용되는 문자열에 어떠한 제한도 가하지 않으며 이름 문자열이 고유할 것을 요구하지 않으며 이름/값 쌍의 순서에 어떠한 의미도 부여하지 않습니다."[23]라고 명시하고 있습니다.개체는 곱슬곱슬한 괄호로 구분되며 쉼표를 사용하여 각 쌍을 구분하고 각 쌍 내에서 콜론 ':' 문자는 키 또는 이름과 값을 구분합니다.
null
: 단어를 사용하여 빈 값null
공백은 구문 요소 주변 또는 사이에 허용되고 무시됩니다(값 및 구두점).이 경우 공백, 가로 탭, 줄 바꿈 및 캐리지 리턴의 네 가지 특정 문자를 공백으로 간주합니다.특히, 바이트 순서 표시는 (JSON을 파싱할 때 허용될 수 있지만) 일치 구현에 의해 생성되지 않아야 합니다. JSON은 주석에 대한 구문을 제공하지 않습니다.[24]
JSON의 초기 버전(RFC 4627에 의해 지정된 것과 같이)에서는 유효한 JSON 텍스트가 객체 또는 배열 유형으로만 구성되어야 하며 이 유형에는 다른 유형이 포함될 수 있습니다.이 제한은 RFC 7158에서 삭제되었으며, 여기서 JSON 텍스트는 직렬화된 값으로 재정의되었습니다.
JSON의 숫자는 프로그래밍 언어에서의 표현과 관련하여 불가지론적입니다.이를 통해 임의 정밀도의 수를 직렬화할 수 있지만 휴대성 문제로 이어질 수 있습니다.예를 들어, 정수 값과 부동 소수점 값 사이에 차별화가 이루어지지 않기 때문에, 일부 구현은 다음을 처리할 수 있습니다.42
,42.0
,그리고.4.2E+1
같은 숫자로, 다른 사람들은 그렇지 않을 수 있습니다.JSON 표준은 오버플로, 언더플로우, 정밀도 손실, 반올림 또는 부호화된 0과 같은 구현 세부 사항에 대한 요구 사항을 제공하지 않지만 "좋은 상호 운용성"을 위해 IEEE 754binary64 정밀도 이하를 기대할 것을 권장합니다.부동 소수점 숫자(바이너리64와 같은)의 기계 수준 이진 표현을 사람이 읽을 수 있는 십진법 표현(JSON의 숫자와 같은)으로 직렬화하는 데 고유한 정밀도 손실이 없습니다. 이를 정확하고 최적으로 수행하기 위한 공개된 알고리즘이 있기 때문입니다.[25]
JSON에서 의도적으로 댓글을 제외했습니다.2012년, 더글러스 크록포드(Douglas Crockford)는 그의 디자인 결정에 대해 이렇게 설명했습니다: "저는 사람들이 구문 분석 지시문을 보유하기 위해 사용하는 것을 보았기 때문에 JSON에서 코멘트를 삭제했습니다. 이는 상호운용성을 파괴할 수 있는 관행이었습니다."[24]
JSON에서는 데이터 구조 내부의 마지막 값 뒤에 있는 쉼표인 "추적 쉼표"를 허용하지 않습니다.[26]후행 쉼표는 사용 편의성을 향상시키기 위한 JSON 파생 제품의 일반적인 특징입니다.[27]
의미론
JSON은 데이터 교환을 위한 구문 프레임워크를 제공하지만, 명확하지 않은 데이터 교환은 JSON 구문의 특정 사용에 대한 의미론에 대한 생산자와 소비자 간의 합의도 필요합니다.[28]그러한 합의가 필요한 한 예는 JSON 표준의 일부가 아닌 자바스크립트 구문에 의해 정의된 데이터 유형의 직렬화(예를 들어, 날짜, 함수, 정규 표현식 및undefined
.[29]
상호운용성
RFC 8259는 JSON 구문의 특정 측면을 설명하고 있는데, 이는 규격에 따라 합법적이기는 하지만 상호 운용성 문제를 야기할 수 있습니다.
- 특정 JSON 구현에서는 객체 또는 배열을 나타내는 JSON 텍스트만 허용합니다.상호 운용성을 위해 JSON을 교환하는 응용 프로그램은 객체 또는 배열인 메시지를 전송해야 합니다.
- 규격은 이름이 같은 여러 멤버를 포함하는 JSON 개체를 허용합니다.중복된 이름을 가진 개체를 처리하는 구현의 동작은 예측할 수 없습니다.상호 운용성을 위해 애플리케이션은 JSON 개체를 전송할 때 중복되는 이름을 피해야 합니다.
- 구체적으로 JSON 객체에서 멤버의 순서는 중요하지 않다고 사양에 명시되어 있습니다.상호운용성을 위해 애플리케이션은 파싱 소프트웨어가 구성원 주문을 가시화하더라도 구성원 주문에 의미를 부여하는 것을 피해야 합니다.
- 규격은 JSON 숫자 리터럴의 크기나 정밀도에 제한을 두지 않지만 널리 사용되는 자바스크립트 구현은 IEEE754 "binary64" 수량으로 저장합니다.상호 운용성을 위해 애플리케이션은 이러한 방식으로 표현할 수 없는 번호(예: 1E400 또는 3.141592653589793238462643383279)를 전송하지 않아야 합니다.
- 규격은 JSON 텍스트의 유니코드 문자 인코딩을 제한하지 않지만 대부분의 구현은 UTF-8 인코딩을 가정합니다. 상호 운용성을 위해 애플리케이션은 항상 UTF-8의 JSON 메시지를 인코딩해야 합니다.
- 규격에서는 유니코드 문자를 정확하게 표현하지 않는 바이트 시퀀스 전송을 금지하지 않습니다.상호 운용성을 위해 애플리케이션은 그러한 바이트 시퀀스가 포함되지 않은 메시지를 전송해야 합니다.
- 이 규격은 응용 프로그램이 유니코드 문자열을 비교하는 방법을 제한하지 않습니다.상호 운용성을 위해 애플리케이션은 항상 코드 단위별로 이러한 비교 코드를 수행해야 합니다.
2015년, IETF는 이러한 상호 운용성 문제를 최대한 피하기 위해 JSON의 구문과 처리를 제한하는 JSON의 제한된 프로파일인 "I-JSON 메시지 포맷"을 기술하는 RFC 7493을 발표했습니다.
메타데이터 및 스키마
JSON 텍스트의 공식 MIME 유형은 "application/json
",[30]그리고[30] 대부분의 현대적 구현은 이를 채택했습니다.비공식 MIME 유형"text/json
" 또는 컨텐츠 유형 "text/javascript
" 또한 많은 서비스 공급자, 브라우저, 서버, 웹 애플리케이션, 라이브러리, 프레임워크 및 API에 의해 레거시 이유로 지원됩니다.대표적인 예로는 구글 [31][32]검색 API, [31]야후!,[31] 플리커, 페이스북 API,[33] 리프트 프레임워크,[34] Dojo Toolkit 0.4 등이 있습니다.[35]
JSON Schema는 JSON 기반 형식을 지정하여 JSON 데이터의 구조를 정의하여 검증, 문서화 및 상호 작용 제어를 수행합니다.그것은 주어진 어플리케이션에 의해 요구되는 JSON 데이터에 대한 계약과 그 데이터를 어떻게 수정할 수 있는지를 제공합니다.[36]JSON Schema는 XML Schema(XSD)의 개념을 기반으로 하지만 JSON 기반입니다.XSD에서와 마찬가지로 스키마와 데이터 모두에 동일한 직렬화/병렬화 도구를 사용할 수 있으며 자체적으로 설명합니다.2021년 1월 28일에 발표된 2020-12년 초안에 있는 IETF의 인터넷 초안에 명시되어 있습니다.[37]다양한 프로그래밍 언어에 사용할 수 있는 몇 가지 검증기가 있으며,[38] 각 검증기의 적합성 수준은 다릅니다.표준 파일 이름 확장명은 .json입니다.[39]
JSON 표준은 개체 참조를 지원하지 않지만 JSON 기반 개체 참조에 대한 IETF 초안 표준이 있습니다.[40]
사용하다
JSON-RPC는 XML-RPC 또는 SOAP를 대체하는 JSON 기반의 원격 프로시저 호출(RPC) 프로토콜입니다.이것은 단지 소수의 데이터 유형과 명령만을 정의하는 간단한 프로토콜입니다.JSON-RPC는 시스템이 알림(응답이 필요하지 않은 서버에 대한 정보)과 순서에 맞지 않게 응답할 수 있는 서버에 여러 개의 호출을 보낼 수 있도록 합니다.
비동기 자바스크립트 및 JSON(또는 AJAJ)은 Ajax와 동일한 동적 웹 페이지 방법론을 나타내지만 XML 대신 JSON이 데이터 형식입니다.AJAJ는 웹 브라우저에 웹 페이지를 로드한 후 새로운 데이터를 요청할 수 있는 웹 개발 방법입니다.일반적으로 해당 웹 페이지의 사용자 작업에 응답하여 서버에서 새 데이터를 렌더링합니다.예를 들어, 사용자가 검색 상자에 입력한 클라이언트 측 코드를 서버에 전송하면 서버는 일치하는 데이터베이스 항목의 드롭다운 목록으로 즉시 응답합니다.
JSON은 임시 사용을 구성 언어로 보고 있습니다.그러나 주석은 지원하지 않습니다.2012년 JSON 제작자인 Douglas Crockford는 환경 설정 언어로 사용될 때 JSON의 코멘트에 대해 이렇게 말했습니다: "댓글이 부족하다는 것은 몇몇 사람들을 슬프게 한다는 것을 알지만, 그렇게 해서는 안 됩니다.주석을 달려는 구성 파일을 보관하기 위해 JSON을 사용한다고 가정합니다.마음에 드는 댓글을 다 넣어보세요.그런 다음 JSON 파서에게 건네주기 전에 JSMin을[41] 통해 파이프를 연결합니다."[24]
몽고DB는 문서 지향 데이터베이스에 JSON과 같은 데이터를 사용합니다.
Postgre와 같은 일부 관계형 데이터베이스SQL과 MySQL은 네이티브 JSON 데이터 유형에 대한 지원을 추가했습니다.이를 통해 개발자가 JSON 데이터를 다른 데이터 형식으로 변환할 필요 없이 관계형 데이터베이스에 직접 저장할 수 있습니다.
안전.
JSON이 자바스크립트의 하위 집합이 되는 것은 JSON 텍스트를 자바스크립트로 전달하는 것이 안전하다는 오해를 초래할 수 있습니다.eval()
기능.이것은 특정 유효한 JSON 텍스트, 특히 U+2028 LINE SEPARATION 또는 U+2029 PRORT SEPARATION을 포함하는 텍스트로 인해 안전하지 않으며 2019년에 자바스크립트 사양이 업데이트되기 전까지는 유효한 자바스크립트 코드가 아니므로 오래된 엔진이 지원하지 않을 수 있습니다.[42]새로운 기능인 인터넷에서 임의의 코드를 실행함으로써 발생하는 많은 함정을 피하기 위해,JSON.parse()
는 2017년 현재 모든 주요 브라우저에서 지원되는 ECMA스크립트 5판에 처음 추가되었습니다.[43]지원되지 않는 브라우저의 경우 API 호환 자바스크립트 라이브러리가 Douglas Crockford에 의해 제공됩니다.[44]또한 TC39 제안서 "Subsum JSON"은 2019년 개정판부터 ECMA스크립트를 엄격한 JSON 슈퍼셋으로 만들었습니다.[20][21]다양한 JSON 구문 분석기 구현은 서비스 거부 공격 및 대량 할당 취약성으로 인해 어려움을 겪었습니다.[45][46]
대안
JSON은 XML이 일반적으로 사용되는 실제 상황에서 생성, 읽기 및 디코딩을 폭넓게 지원하기 때문에 XML의 낮은 오버헤드 대안으로 권장됩니다.[47]XML을 제외하고 CSV와 JSON의 수퍼셋 등을 예로 들 수 있습니다.또한 Google 프로토콜 버퍼는 데이터 교환 언어가 아니지만 이 역할을 채울 수 있습니다.
XML
XML은 구조화된 데이터를 설명하고 개체를 직렬화하는 데 사용되었습니다.동일한 종류의 데이터 교환 목적을 위해 JSON과 동일한 종류의 데이터 구조를 나타내기 위해 다양한 XML 기반 프로토콜이 존재합니다.데이터는 여러 가지 방법으로 XML로 인코딩할 수 있습니다.태그 쌍을 사용하는 가장 확장적인 형태는 JSON보다 훨씬 더 큰 (문자 수로) 표현이 되지만, 데이터가 속성에 저장되고 클로징 태그가 다음으로 대체되는 '짧은 태그' 형태일 경우/>
, 표현은 종종 JSON과 거의 같은 크기이거나 조금 더 큽니다.그러나 XML 특성은 단일 값만 가질 수 있으며 각 특성은 각 요소에 최대 한 번만 나타날 수 있습니다.
XML은 요소와 속성을 사용하여 "데이터"와 "메타데이터"를 구분하는 반면, JSON은 그러한 개념을 가지고 있지 않습니다.
또 다른 주요 차이점은 값의 주소 지정입니다.JSON에는 단순한 "키"에서 "값" 매핑을 가진 객체가 있는 반면, XML 주소 지정은 "노드"에서 이루어지며, 모두 XML 프로세서를 통해 고유 ID를 받습니다.또한 XML 표준은 공통 속성을 정의합니다.xml:id
, 사용자가 ID를 명시적으로 설정하는 데 사용할 수 있습니다.
XML 태그 이름에는 문자가 포함될 수 없습니다.!"#$%&'()*+,/;<=>?@[\]^`{ }~
, 공백 문자도 아니고 시작할 수 없습니다.-
,.
, 또는 숫자 숫자를 사용할 수 있지만 JSON 키는 사용할 수 있습니다(따옴표 및 백슬래시를 제외해야 하는 경우에도).[48]
XML 값은 기본 형식 안전성이 없는 문자 문자열입니다.XML은 스키마 개념을 가지고 있으며, 이는 강력한 타이핑, 사용자 정의 유형, 미리 정의된 태그 및 형식 구조를 허용하여 XML 스트림의 형식적인 유효성 검사를 허용합니다.JSON에는 여러 종류가 내장되어 있으며 JSON 스키마에서도 유사한 스키마 개념을 가지고 있습니다.
XML은 주석을 지원하지만 JSON은 지원하지 않습니다.[49][24]
수퍼세트
주석 및 기타 기능에 대한 지원이 유용한 것으로 간주되었으며, 이로 인해 여러 비표준 JSON 수퍼셋이 생성되었습니다.그 중에는 HJSON,[50] HOCON, JSON5가 있습니다. (이름은 그렇지만 JSON의 다섯 번째 버전은 아닙니다.)[51][52]
YAML
YAML 버전 1.2는 JSON의 상위 집합입니다. 이전 버전은 엄격하게 호환되지 않았습니다.예를 들어 슬래시 탈출/
뒤통수를 치며\
는 JSON에서는 유효하지만 YAML에서는 유효하지 않았습니다.[53] YAML은 코멘트를 지원하는 반면 JSON은 그렇지 않습니다.[53][51][24]
CSON
CSON ("cursive script object 표기법")은 RFC 4627에 의해 명시된 JSONs ABNF 문법에 작은 문법 추가로 정의됩니다.YAML과 마찬가지로 JSON의 엄격한 수퍼세트입니다.YAML과 반대로 모든 CSON 데이터는 JSON으로 앞뒤로 번역이 가능하므로 JSON만 이해하는 라이브러리를 계속 사용할 수 있고 기존 JSON을 번역할 필요가 없습니다.이러한 JSON 동등성 이외에도 설계 고려 사항은 다음과 같습니다.[54]
- 쓰기 편함, 코멘트, 싱글 + 더블 따옴표 문자열, 여러 줄의 문자열, 중복 쉼표를 지원합니다.
- 구문 분석의 용이성, LL(1)이며 컨텍스트 민감성을 명시적으로 방지합니다.
- JavaScript와의 호환성이 엄격하지 않으므로 HTTP를 통한 CSON을 피하십시오.
- 공백이 유의하지 않습니다.
- YAML과 마찬가지로 엄격한 문자열, 예를 들어 TOML과는 달리 데이터 유형이 없습니다. 추가 데이터 유형은 데이터 형식 작업이 되어서는 안 되며 모든 구현을 어렵게 만듭니다.
C, 자바스크립트, 파이썬, 러스트용 라이브러리가 존재합니다.
호콘
HOCON ("Human-Optimized Config Object Notation")은 사람이 읽을 수 있는 데이터를 위한 형식이며 JSON의 상위 집합입니다.[55]HOCON의 용도는 다음과 같습니다.
- 주로 플레이 프레임워크와 함께 사용되며 라이트벤드가 개발했습니다.[56]
- 의 구성 형식으로도 지원됩니다.Akka를 통한 NET 프로젝트.NET과[57][58] Puppet.[59]
- TIBCO 스트리밍:[60] HOCON은 TIBCO 스트리밍[61] 릴리스 10 현재 TIBCO 스트리밍 제품군(StreamBase, LiveView 및 Artifact Management Server)의 기본 구성 파일 형식입니다.[62]
- Exabeam Advanced Analytics의 여러 하위 시스템의 기본 구성 파일 형식이기도 합니다.[63]
- Jitsi는 "새로운" 구성 시스템으로 사용하고 .properties-Files는 폴백으로[64][65] 사용합니다.
JSON5
JSON5("JSON5 Data Interchange Format")는 JSON 구문의 확장으로 JSON과 마찬가지로 자바스크립트 구문도 유효합니다.이 사양은 2012년에 시작되어 2018년에 버전 1.0.0으로 완료되었습니다.[66]JSON 구문의 주요 차이점은 다음과 같습니다.
- 선택적 후행 쉼표
- 따옴표로 묶지 않은 개체 키
- 따옴표로 묶은 단일 문자열 및 다중 행 문자열
- 추가 번호 형식
- 평.
JSON5 구문은 SQLite 등 일부 소프트웨어에서 JSON 구문의 확장으로 지원됩니다.[67]
파생상품
JSON 규격 상에 또는 JSON 규격으로부터 여러 직렬화 형식이 구축되어 있습니다.예를 들면 다음과 같습니다.
- GeoJSON은 단순한 지리적 특징을[68][69] 표현하기 위해 고안된 포맷입니다.
- JSON→ url, JSON 데이터 모델을 위한 언어 독립 데이터 교환 포맷
- JSON-LD, 링크된[72][73] 데이터를 JSON을 이용하여 인코딩하는 방법
- JSON-RPC, JSON으로[74] 인코딩된 원격 프로시저 호출 프로토콜
- XML과 JSON[75][76] 사이를 매핑하는 데 사용되는 경량 마크업 언어인 JsonML
- 스마일(데이터 교환 형식)[77][78]
- UBJSON, JSON을 모방한 바이너리 컴퓨터 데이터 교환 형식이지만 바이트 수가 적은 데이터를[79][80] 필요로 합니다.
참고 항목
- BSON
- 데이터 직렬화 형식 비교
- 아마존 이온 – JSON의 슈퍼세트
- 잭슨(API)
- jaql - JSON 쿼리 처리에 가장 일반적으로 사용되는 함수 데이터 처리 및 쿼리 언어
- jq - "JSON 쿼리 언어" 및 고급 프로그래밍 언어
- JSONiq - XQuery 기반의 JSON 지향 쿼리 및 처리 언어
- JSON 스트리밍
- S식
- 위키백과 TNT 모듈
참고문헌
- ^ "Douglas Crockford: The JSON Saga". YouTube. August 28, 2011. Retrieved February 21, 2022.
- ^ a b c "ISO/IEC 21778:2017". ISO. Retrieved July 29, 2019.
- ^ "Standard ECMA-404 - The JSON Data Interchange Syntax" (PDF). Ecma International. December 2017. p. 1, footnote. Retrieved October 27, 2019.
- ^ ECMA-404: The JSON Data Interchange Format (PDF) (2nd ed.). Geneva: ECMA International. December 2017.
- ^ Nemeth, Evi; Snyder, Garth; Hein, Trent R.; Whaley, Ben; Mackin, Dan (2017). "19: Web Hosting". UNIX and Linux System Administration Handbook (5th ed.). Addison-Wesley Professional. ISBN 9780134278292. Retrieved October 29, 2019.
- ^ "Douglas Crockford: The JSON Saga - Transcript Vids". transcriptvids.com. Retrieved October 29, 2019.
- ^ a b "The JSON Data Interchange Format" (PDF). ECMA International. October 2013. Retrieved October 24, 2019.
- ^ a b Bray, T. (December 2017). Bray, T (ed.). "The JavaScript Object Notation (JSON) Data Interchange Format". IETF. doi:10.17487/RFC8259. Retrieved February 16, 2018.
{{cite journal}}
:저널 요구사항 인용journal=
(도움말) - ^ Bray, Tim. "JSON Redux AKA RFC7159". Ongoing. Retrieved March 16, 2014.
- ^ "Unofficial Java History". Edu4Java. 26 May 2014. Archived from the original on 26 May 2014. Retrieved 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.
- ^ "Douglas Crockford — The JSON Saga". YouTube. August 28, 2011. Retrieved September 23, 2016.
- ^ "JSON". json.org.
- ^ Yahoo!. "Using JSON with Yahoo! Web services". Archived from the original on October 11, 2007. Retrieved July 3, 2009.
- ^ Crockford, Douglas (May 28, 2009). "Introducing JSON". json.org. Retrieved July 3, 2009.
It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999.
- ^ Bray, Tim (December 2017). "History for draft-ietf-jsonbis-rfc7159bis-04". IETF Datatracker. Internet Engineering Task Force. Retrieved October 24, 2019.
2017-12-13 [...] RFC published
- ^ Bray, Tim (December 13, 2017). "RFC 8259 - The JavaScript Object Notation (JSON) Data Interchange Format". IETF Datatracker. Internet Engineering Task Force. Retrieved October 24, 2019.
Type: RFC - Internet Standard (December 2017; Errata); Obsoletes RFC 7159; Also known as STD 90
- ^ Apache 및 JSON 라이센스는 Jake Edge에 의해 LWN.net 에서 제공됩니다(2016년 11월 30일).
- ^ Douglas Crockford (July 10, 2016). "JSON in JavaScript". Archived from the original on July 10, 2016. Retrieved August 13, 2016.
JSON is a subset of the object literal notation of JavaScript.
- ^ Holm, Magnus (May 15, 2011). "JSON: The JavaScript subset that isn't". The timeless repository. Archived from the original on May 13, 2012. Retrieved September 23, 2016.
- ^ a b c "Subsume JSON: Proposal to make all JSON text valid ECMA-262". Ecma TC39. August 23, 2019. Retrieved August 27, 2019.
- ^ a b "Advance to Stage 4 - tc39/proposal-json-superset". GitHub. May 22, 2018.
- ^ "BigInt - MDN Web doc glossary". Mozilla. Retrieved October 18, 2020.
- ^ The JSON Data Interchange Syntax (PDF) (2nd ed.). Ecma International. December 2017. p. 3.
The JSON syntax does not impose any restrictions on the strings used as names, does not require that name strings be unique, and does not assign any significance to the ordering of name/value pairs.
{{cite book}}
: CS1 메인 : 일자 및 연도 (링크) - ^ a b c d e Crockford, Douglas (April 30, 2012). "Comments in JSON". Archived from the original on July 4, 2015. Retrieved August 30, 2019.
I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't. Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.
- ^ Andrysco, Marc; Jhala, Ranjit; Lerner, Sorin. "Printing Floating-Point Numbers - An Always Correct Method" (PDF). Retrieved July 27, 2019.
- ^ The JSON Data Interchange Syntax (PDF) (2nd ed.). Ecma International. December 2017. p. 11.
A single comma token separates a value from a following name.
{{cite book}}
: CS1 메인 : 일자 및 연도 (링크) - ^ "JSON5". json5. Archived from the original on November 29, 2020. Retrieved December 16, 2020.
- ^ "The JSON Data Interchange Syntax" (PDF). Ecma International. December 2017. Retrieved October 27, 2019.
The JSON syntax is not a specification of a complete data interchange. Meaningful data interchange requires agreement between a producer and consumer on the semantics attached to a particular use of the JSON syntax. What JSON does provide is the syntactic framework to which such semantics can be attached
- ^ "ECMAScript 2019 Language Specification" (PDF). Ecma International. June 2019. Archived from the original (PDF) on April 12, 2015. Retrieved October 27, 2019.
- ^ "Media Types". iana.org. Retrieved September 13, 2015.
- ^ a b c "Handle application/json & text/json by benschwarz · Pull Request #2 · mislav/faraday-stack". GitHub. Retrieved September 13, 2015.
- ^ "Yahoo!, JavaScript, and JSON". ProgrammableWeb. December 16, 2005. Retrieved September 13, 2015.
- ^ "Make JSON requests allow text/javascript content by jakeboxer · Pull Request #148 · AFNetworking/AFNetworking". GitHub. Retrieved September 13, 2015.
- ^ "lift/Req.scala at master · lift/lift · GitHub". GitHub. Retrieved September 13, 2015.
- ^ "BrowserIO.js in legacy/branches/0.4/src/io – Dojo Toolkit". dojotoolkit.org. Archived from the original on January 10, 2016. Retrieved September 13, 2015.
- ^ "JSON Schema and Hyper-Schema". json-schema.org. Retrieved June 8, 2021.
- ^ "draft-handrews-json-schema-00 - JSON Schema: A Media Type for Describing JSON Documents". json-schema.org/. January 28, 2021. Retrieved June 8, 2021.
- ^ "JSON Schema Implementations". json-schema.org. Retrieved June 8, 2021.
- ^ Bray, Tim (December 2017). "11. IANA Considerations". RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format. IETF.
- ^ Zyp, Kris (September 16, 2012). Bryan, Paul C. (ed.). "JSON Reference: draft-pbryan-zyp-json-ref-03". Internet Engineering Task Force.
- ^ Crockford, Douglas (May 16, 2019). "JSMin". Retrieved August 12, 2020.
JSMin [2001] is a minification tool that removes comments and unnecessary whitespace from JavaScript files.
- ^ "JSON: The JavaScript subset that isn't". Magnus Holm. Archived from the original on May 13, 2012. Retrieved May 16, 2011.
- ^ "ECMAScript Fifth Edition" (PDF). Archived from the original (PDF) on April 14, 2011. Retrieved March 18, 2011.
- ^ "douglascrockford/JSON-js". GitHub. August 13, 2019.
- ^ "Denial of Service and Unsafe Object Creation Vulnerability in JSON (CVE-2013-0269)". Retrieved January 5, 2016.
- ^ "Microsoft .NET Framework JSON Content Processing Denial of Service Vulnerability". Archived from the original on November 6, 2018. Retrieved January 5, 2016.
- ^ "JSON: The Fat-Free Alternative to XML". json.org. Retrieved March 14, 2011.
- ^ "XML 1.1 Specification". World Wide Web Consortium. Retrieved August 26, 2019.
- ^ Saternos, Casimir (2014). Client-server web apps with Javascript and Java. "O'Reilly Media, Inc.". p. 45. ISBN 9781449369316.
- ^ Edelman, Jason; Lowe, Scott; Oswalt, Matt. Network Programmability and Automation. O'Reilly Media.
for data representation you can pick one of the following: YAML, YAMLEX, JSON, JSON5, HJSON, or even pure Python
- ^ a b McCombs, Thayne (July 16, 2018). "Why JSON isn't a good configuration language". Lucid Chart. Retrieved June 15, 2019.
- ^ "HOCON (Human-Optimized Config Object Notation)". GitHub. January 28, 2019. Retrieved August 28, 2019.
The primary goal is: keep the semantics (tree structure; set of types; encoding/escaping) from JSON, but make it more convenient as a human-editable config file format.
- ^ a b "YAML Ain't Markup Language (YAML™) Version 1.2". yaml.org. Retrieved September 13, 2015.
- ^ CSON, 사양 및 README, 최종 업데이트: 2021-07-01.
- ^ "config/HOCON.md at master · lightbend/config". GitHub. Retrieved August 5, 2021.
- ^ "Config File - 2.5.x". www.playframework.com. Retrieved August 5, 2021.
- ^ Akka.NET HOCON 문서
- ^ "Akka.NET Documentation Akka.NET Documentation". getakka.net. Retrieved August 5, 2021.
- ^ Puppet을 사용하여 HOCON 구성 파일 관리
- ^ "StreamBase Documentation". docs.streambase.com. Retrieved August 5, 2021.
- ^ "Configuration Guide". docs.streambase.com. Retrieved August 5, 2021.
- ^ "StreamBase New and Noteworthy Archive". docs.streambase.com. Retrieved August 5, 2021.
- ^ Exabeam Advanced Analytics 릴리즈 노트
- ^ JITSI Project. "Config phase 1". GitHub. Retrieved February 16, 2021.
- ^ JITSI Project. "reference.conf". GitHub. Retrieved February 16, 2021.
- ^ "The JSON5 Data Interchange Format". Retrieved June 25, 2022.
- ^ SQLite. "JSON Functions And Operators". Retrieved June 25, 2023.
- ^ Butler, H.; Daly, M.; Doyle, A.; Gillies, Sean; Schaub, T.; Hagen, Stefan (August 2016). "RFC 7946 - The GeoJSON Format". IETF Datatracker. Retrieved June 17, 2022.
- ^ "GeoJSON". geojson.org. Retrieved August 7, 2022.
- ^ "JSON→URL Specification". Ongoing. Retrieved April 9, 2021.
- ^ "JSON inside a URL". jsonurl. Retrieved August 7, 2022.
- ^ "JSON-LD 1.1". World Wide Web Consortium. July 16, 2020. Retrieved June 17, 2022.
- ^ "JSON-LD - JSON for Linking Data". json-ld.org. Retrieved August 7, 2022.
- ^ "JSON-RPC". jsonrpc.org. Retrieved June 17, 2022.
- ^ "JsonML (JSON Markup Language)". JsonML.org. Retrieved June 17, 2022.
- ^ McKamey, Stephen (June 14, 2022), JsonML, retrieved August 7, 2022
- ^ "FasterXML/smile-format-specification: New home for Smile format". GitHub. Retrieved June 17, 2022.
- ^ Gupta, Ayush (February 10, 2019). "Understanding Smile — A data format based on JSON". Code with Ayush. Retrieved August 7, 2022.
- ^ "Universal Binary JSON Specification – The universally compatible format specification for Binary JSON". ubjson.org. Retrieved June 17, 2022.
- ^ "UBJSON - JSON for Modern C++". json.nlohmann.me. Retrieved August 7, 2022.