Автор (ы) | Рияд Калла |
---|---|
Стабильная версия | Черновик 12 |
Написано на | На разных языках |
Операционная система | Любая |
Платформа | Межплатформенный |
Тип | Обмен данными |
Лицензия | Apache 2.0 |
Веб-сайт | ubjson.org |
Universal Binary JSON (UBJSON ) - это формат обмена данными компьютер. Это двоичная форма, имитирующая JSON, но требующая меньшего количества байтов данных. Он нацелен на достижение универсальности JSON в сочетании с тем, что его намного проще обрабатывать, чем JSON.
UBJSON является предлагаемым преемником BSON и других. UBJSON преследует следующие цели:
Данные UBJSON могут быть либо значением, либо контейнер.
UBJSON использует один двоичный кортеж для представления всех типов значений JSON:
тип [длина] [данные]
Каждый элемент в Кортеж определяется как:
Тип - это 1-байтовый символ ASCII, используемый для обозначения типа данных, следующих за ним. Символы ASCII были выбраны, чтобы максимально упростить ручной обход и отладку данных, хранящихся в формате UBJSON (например, сделать данные относительно читаемыми в шестнадцатеричном редакторе). Доступны типы для пяти типов значений JSON. Также существует тип no-op, используемый для поддержания активности потока.
Z
N
- нет операции, которая должна игнорироваться принимающей сторонойT
) и false (F
)i
), uint8 (U
), int16 (I
), int32 (l
), int64 (L
), float32 (d
), float64 (D
) и символ высокой точности (H
)C
S
высокая точность числа представлены в виде произвольно длинного числового значения в кодировке UTF-8.
Длина - это целое число (например, uint8 или int64), кодирующее размер полезной нагрузки данных в байтах. Он используется для строк, чисел высокой точности и, возможно, контейнеров. Для других типов они опущены.
Длина кодируется по тому же соглашению, что и целые числа, таким образом, включая ее собственный тип. Например, строка hello
кодируется как S
,U
, 0x05, h
,e
,l
,l
,o
.
Последовательность байтов, представляющая фактические двоичные данные для этого типа значения. Все числа расположены в порядке обратным порядком байтов.
Подобно JSON, UBJSON определяет два типа контейнеров: массив и объект.
Массивы - это упорядоченные последовательности элементов, представленные как [
, за которым следует ноль или более элементов значения и типа контейнера и завершающий ]
.
Объекты - это помеченные наборы элементов, представленные в виде {
, за которым следует ноль или более пар ключ-значение и завершающий }
. Каждый ключ представляет собой строку с опущенным символом S
, и каждое «значение» может быть любым элементом значения или типа контейнера.
В качестве альтернативы массивы и объекты могут указывать количество содержащихся в них элементов как #
, за которым следует целое число перед их первым элементом, и в этом случае завершающий ]
или }
опущено. Кроме того, если все элементы имеют один и тот же тип, типы могут быть опущены и заменены одним $
, за которым следует тип, и в этом случае количество элементов должно следовать немедленно. Например, массив ["a", "b", "c"] может быть представлен как [
,$
,C
,#
,U
, 0x03, a
,b
,c
.
Хотя явного двоичного типа нет, двоичные данные хранится в строго типизированном массиве значений uint8. Это обеспечивает бинарную эффективность при сохранении совместимости с JSON, даже если JSON не имеет прямой поддержки бинарных данных.
Рекомендуется MIME-тип 'application / ubjson', как и расширение файла '.ubj' при хранении в файловой системе.