UBJSON
UBJSON원본 작성자 | 리야드 칼라 |
---|---|
안정적 해제 | 드래프트 12 |
기록 위치 | 다양한 언어 |
운영 체제 | 아무거나 |
플랫폼 | 크로스 플랫폼 |
유형 | 데이터 교환 |
면허증 | 아파치 2.0 |
웹사이트 | ubjson |
유니버설 바이너리 JSON(Universal Binary JSON)은 컴퓨터 데이터 교환 형식이다.JSON을 직접 모방한 바이너리 형태지만, 더 적은 바이트의 데이터를 필요로 한다.JSON보다 처리가 훨씬 쉬운 것과 결합하여 JSON의 일반성을 달성하는 것을 목표로 한다.
근거와 목표
UBJSON은 BSON, BJSON 등의 후계자로 제안되고 있다.UBJSON은 다음과 같은 목표를 가지고 있다.
- JSON 사양과의 완벽한 호환성 – 표준 JSON과 UBJSON 사이에 1:1 매핑이 있다.
- 구현 용이성 – 특정 언어가 잘 지원되지 않는 문제가 없도록 인기 프로그래밍 언어로 광범위하게 지원되는 데이터 유형만 포함.
- 사용 편의성 – 빠르게 이해하고 채택할 수 있다.
- 속도와 효율성 – UBJSON은 압축된 JSON보다 30% 더 작고 빠른 파싱에 최적화된 데이터 표현을 사용한다.스트리밍된 직렬화가 지원되며, 이는 네트워크 연결을 통한 UBJSON 전송이 데이터의 최종 크기가 알려지기 전에 데이터 전송을 시작할 수 있다는 것을 의미한다.
데이터 유형 및 구문
UBJSON 데이터는 값 또는 컨테이너일 수 있다.
값 유형
UBJSON은 단일 이진 튜플을 사용하여 모든 JSON 값 유형을 나타냄:[1]
[길이] [데이터]를 입력하십시오.
튜플의 각 요소는 다음과 같이 정의된다.
타자를 치다
타입은 그것을 따르는 데이터의 타입을 나타내는 데 사용되는 1바이트 ASCII 문자다.ASCII 문자는 UBJSON 형식으로 저장된 데이터를 가능한 한 쉽게 수동으로 걷고 디버깅하기 위해 선택되었다(예: 16진수 편집기에서 데이터를 비교적 쉽게 읽을 수 있게 함).5가지 JSON 값 유형에 대해 유형을 사용할 수 있다.또한 스트림 keep-alive에 사용되는 no-op 타입도 있다.
- Null:
Z
- 작업 안 함:
N
- 작업 없음, 수신 엔드에 의해 무시 - 부울 유형: true(참)
T
) 및 거짓().F
) - 숫자 유형: int8(
i
), uint8 (U
), int16 (I
), int32 (l
), int64 (L
), float32 (d
), float64 (D
) 및 고농축(High-caluation)H
) - ASCII 문자:
C
- UTF-8 문자열:
S
고정밀 번호는 임의로 긴 UTF-8 문자열 인코딩 숫자 값으로 표현된다.
길이(선택사항)
길이는 데이터 페이로드 크기를 바이트 단위로 인코딩하는 정수(예: uint8 또는 int64)이다.문자열, 고정밀 번호, 선택적으로 용기에 사용된다.그것들은 다른 종류에 대해서는 생략된다.
길이는 정수와 같은 관례를 따라 인코딩되며, 따라서 자체 유형을 포함한다.예를 들어, 문자열hello
로 암호화되어 있다.S
,U
,0x05,h
,e
,l
,l
,o
.
데이터(옵션)
이 유형의 값에 대한 실제 이진수 데이터를 나타내는 바이트 시퀀스.모든 숫자는 큰 엔디안 순서로 되어 있다.
용기종류
JSON과 마찬가지로 UBJSON은 두 가지 유형의 컨테이너를 정의한다.[2]
배열은 원소의 순서가 정렬된 배열로, 다음과 같이 표현된다.[
0개 이상의 값 요소와 용기 유형 및 후행 요소]
.
객체는 원소 집합에 라벨이 붙어 있으며, 이는 다음과 같다.{
0개 이상의 키 값 쌍 및 후행}
. 각각의 열쇠는 .이 있는 끈이다.S
문자가 생략되고 각 "값"은 값 또는 용기 유형의 요소가 될 수 있다.
또는 배열과 객체가 포함하는 요소의 수를 다음과 같이 나타낼 수 있다.#
그 다음 첫 번째 요소 앞에 정수(이 경우 후행)가 나타난다.]
또는}
누락되다또한 모든 원소의 유형이 동일한 경우 그 유형을 생략하고 단일 원소로 교체할 수 있다.$
형식 다음에, 이 경우 요소 카운트는 즉시 따라야 한다.예를 들어, 배열 ["a","b","c"는 다음과 같이 나타낼 수 있다.[
,$
,C
,#
,U
,0x03,a
,b
,c
.
이항 데이터
명시적인 바이너리 유형은 없지만, 이진수 데이터는 강하게 입력된 uint8 값의 배열에 저장된다.이는 JSON이 바이너리 데이터를 직접 지원하지 않더라도 JSON과의 호환성을 유지하면서 바이너리 효율을 보장한다.[3][4]
표현
파일 시스템에 저장할 때 파일 확장자 '.ubj'와 마찬가지로 MIME 유형 'application/ubjson'이 권장된다.[4]
소프트웨어 지원
- Teradata 데이터베이스[5]
- Wolfram Language는 UBJ에 대한 지원을 도입했다.2017년 SON 버전 11.1의 언어.[4]
참고 항목
- 데이터 직렬화 형식 비교
- 제이슨
- CBOR
- 스마일(이진 JSON)
- 프로토콜 버퍼
- 작업 메시지 형식
- 아파치 레프트
- 메시지 팩
- 문서 지향 데이터베이스(예: MongoDB)
- 추상 구문 표기법 1(ASN.1)
- 무선 이진 XML(WBXML)
- 효율적인 XML 교환
참조
- ^ "Value Types Universal Binary JSON Specification". Retrieved 20 July 2019.
- ^ "Container Types Universal Binary JSON Specification". Retrieved 20 July 2019.
- ^ "Binary Data Universal Binary JSON Specification". Retrieved 20 July 2019.
- ^ a b c "UBJSON (.ubj)—Wolfram Language Documentation". Retrieved 20 July 2019.
- ^ "UBJSON Storage Format". Retrieved 20 July 2019.