UBJSON
Oryginalni autorzy | Rijad Kalla |
---|---|
Wersja stabilna | Projekt 12 |
Napisane w | Różne języki |
System operacyjny | Każdy |
Platforma | Międzyplatformowe |
Typ | Wymiana danych |
Licencja | Apache 2.0 |
Strona internetowa |
Universal Binary JSON ( UBJSON ) to format wymiany danych komputerowych . Jest to postać binarna bezpośrednio imitująca JSON , ale wymagająca mniejszej liczby bajtów danych. Ma na celu osiągnięcie ogólności JSON w połączeniu z dużo łatwiejszym przetwarzaniem niż JSON.
Uzasadnienie i cele
UBJSON jest proponowanym następcą BSON , BJSON i innych. UBJSON ma następujące cele:
- Pełna kompatybilność ze specyfikacją JSON – istnieje odwzorowanie 1:1 pomiędzy standardowym JSON a UBJSON.
- Łatwość implementacji – obejmuje tylko typy danych, które są szeroko obsługiwane w popularnych językach programowania, dzięki czemu nie ma problemów z niewłaściwą obsługą niektórych języków.
- Łatwość użycia – można to szybko zrozumieć i zaadaptować.
- Szybkość i wydajność – UBJSON wykorzystuje reprezentacje danych, które są (około) 30% mniejsze niż ich skompaktowane odpowiedniki JSON i są zoptymalizowane pod kątem szybkiego analizowania. Obsługiwana jest serializacja strumieniowa, co oznacza, że przesyłanie UBJSON przez połączenie sieciowe może rozpocząć wysyłanie danych, zanim znany będzie ostateczny rozmiar danych.
Typy danych i składnia
Dane UBJSON mogą być wartościami lub kontenerami .
Typy wartości
UBJSON używa pojedynczej krotki binarnej do reprezentowania wszystkich typów wartości JSON:
typ [długość] [dane]
Każdy element w krotce jest zdefiniowany jako:
typ
Typ to 1-bajtowy znak ASCII używany do wskazania typu następujących po nim danych. Znaki ASCII zostały wybrane tak, aby ręczne przeglądanie i debugowanie danych przechowywanych w formacie UBJSON było jak najłatwiejsze (np. aby dane były względnie czytelne w edytorze szesnastkowym). Typy są dostępne dla pięciu typów wartości JSON. Istnieje również no-op używany do utrzymywania transmisji strumieniowej.
-
Brak :
Z
-
No-op :
N
- brak operacji, który ma być zignorowany przez odbiorcę -
Typy logiczne : prawda (
T
) i fałsz (F
) - Typy numeryczne: int8 (
i
), uint8 (U
), int16 (I
), int32 (l
), int64 (L
), float32 (d
), float64 (D
) i high-precision (H
) -
ASCII :
C
-
UTF-8 :
S
Liczby o wysokiej precyzji są reprezentowane jako dowolnie długie wartości liczbowe zakodowane w UTF-8.
długość (opcjonalnie)
Długość jest liczbą całkowitą (np. uint8 lub int64) kodującą rozmiar ładunku danych w bajtach. Jest używany do ciągów znaków, liczb o wysokiej precyzji i opcjonalnie kontenerów. Są one pomijane w przypadku innych typów.
Długość jest kodowana zgodnie z tą samą konwencją, co liczby całkowite, włączając w to własny typ. Na przykład ciąg hello
jest zakodowany jako S
, U
, 0x05, h
, e
, l
, l
, o
.
dane (opcjonalnie)
Sekwencja bajtów reprezentujących rzeczywiste dane binarne dla tego typu wartości. Wszystkie liczby są w big-endian .
Rodzaje kontenerów
Podobnie jak JSON, UBJSON definiuje dwa typy kontenerów: array i object .
Tablice to uporządkowane sekwencje elementów reprezentowane jako [
po którym następuje zero lub więcej elementów wartości i typu kontenera oraz końcowy ]
.
Obiekty są etykietami zestawów elementów, reprezentowanymi jako {
, po którym następuje zero lub więcej par klucz-wartość i końcowy }
. Każdy klucz jest ciągiem znaków z pominiętym znakiem S , a każda „wartość” może być dowolnym elementem wartości lub typu kontenera.
Alternatywnie tablice i obiekty mogą wskazywać liczbę elementów, które zawierają, jako #
, po którym następuje liczba całkowita przed pierwszym elementem, w którym to przypadku końcowe ]
lub }
są pomijane. Dodatkowo, jeśli wszystkie elementy mają ten sam typ, typy można pominąć i zastąpić pojedynczym $
, po którym następuje typ, w którym to przypadku liczba elementów musi nastąpić natychmiast. Na przykład tablica ["a","b","c"] może być reprezentowana jako [
, $
, C
, #
, U
,0x03, a
, b
, c
.
Dane binarne
Chociaż nie ma jawnego typu binarnego, dane binarne są przechowywane w silnie typowanej tablicy wartości uint8. Zapewnia to wydajność binarną przy zachowaniu zgodności z JSON, mimo że JSON nie ma bezpośredniego wsparcia dla danych binarnych.
Reprezentacja
typ MIME „application/ubjson”, podobnie jak rozszerzenie pliku „.ubj”, gdy plik jest przechowywany w systemie plików.
Wsparcie oprogramowania
- Baza danych Teradata
- Wolfram Language wprowadził obsługę UBJSON w 2017 roku wraz z wersją 11.1 języka.
Zobacz też
- Porównanie formatów serializacji danych
- JSON
- CBOR
- Uśmiech (binarny JSON)
- Bufory protokołów
- Format komunikatu akcji
- Oszczędność Apache
- Pakiet wiadomości
- Baza danych zorientowana na dokumenty (np. MongoDB )
- Abstrakcyjny zapis składni jeden (ASN.1)
- Bezprzewodowy binarny XML (WBXML)
- Wydajna wymiana XML