UBJSON - UBJSON
Эта статья нужны дополнительные цитаты для проверка.Октябрь 2019) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Оригинальный автор (ы) | Рияд Калла |
---|---|
Стабильный выпуск | Проект 12 |
Написано в | Различные языки |
Операционная система | Любой |
Платформа | Кроссплатформенность |
Тип | Обмен данными |
Лицензия | Apache 2.0 |
Интернет сайт | ubjson |
Универсальный двоичный JSON (UBJSON) это компьютер формат обмена данными. Это двоичная форма, непосредственно имитирующая JSON, но требует меньше байтов данных. Он нацелен на достижение универсальности JSON в сочетании с тем, что его намного проще обрабатывать, чем JSON.
Обоснование и цели
UBJSON - предлагаемый преемник BSON, BJSON и другие. UBJSON преследует следующие цели:
- Полная совместимость со спецификацией JSON - между стандартным JSON и UBJSON существует соответствие 1: 1.
- Простота реализации - включая только те типы данных, которые широко поддерживаются в популярных языках программирования, так что нет проблем с некоторыми языками, которые не поддерживаются должным образом.
- Легкость использования - его можно быстро понять и принять.
- Скорость и эффективность - UBJSON использует представления данных, которые (примерно) на 30% меньше, чем их сжатые аналоги JSON, и оптимизированы для быстрого анализа. Поддерживается потоковая сериализация, что означает, что передача UBJSON по сетевому соединению может начать отправку данных до того, как станет известен окончательный размер данных.
Типы данных и синтаксис
Данные UBJSON могут быть либо ценить или контейнер.
Типы значений
UBJSON использует один двоичный кортеж для представления всех типов значений JSON:[1]
тип [длина] [данные]
Каждый элемент в кортеже определяется как:
тип
Тип - 1-байтовый ASCII символ, используемый для обозначения типа следующих за ним данных. Символы ASCII были выбраны, чтобы максимально упростить ручной обход и отладку данных, хранящихся в формате UBJSON (например, сделать данные относительно читаемыми в шестнадцатеричном редакторе). Доступны типы для пяти типов значений JSON. Также есть безоперационный Тип, используемый для поддержания активности потока.
- Ноль:
Z
- Нет операции:
N
- нет операции, игнорируется принимающей стороной - Булевы типы: истинный (
Т
) и ложь (F
) - Числовые типы: int8 (
я
), uint8 (U
), int16 (я
), int32 (л
), int64 (L
), float32 (d
), float64 (D
), и высокая точность (ЧАС
) - ASCII персонаж:
C
- UTF-8 нить:
S
Числа высокой точности представлены в виде произвольно длинных числовых значений в строковой кодировке UTF-8.
длина (необязательно)
Длина - это целое число (например, uint8 или int64), кодирующее размер полезной нагрузки данных в байтах. Он используется для строк, чисел высокой точности и, возможно, контейнеров. Для других типов они опущены.
Длина кодируется по тому же соглашению, что и целые числа, таким образом, включая собственный тип. Например, строка Привет
кодируется как S
,U
, 0x05,час
,е
,л
,л
,о
.
данные (необязательно)
Последовательность байтов, представляющая фактические двоичные данные для этого типа значения. Все числа в прямой порядок байтов порядок.
Типы контейнеров
Подобно JSON, UBJSON определяет два типа контейнеров: множество и объект.[2]
Массивы - это упорядоченные последовательности элементов, представленные в виде [
за которым следует ноль или более элементов значения и типа контейнера и завершающий ]
.
Объекты - это помеченные наборы элементов, представленные в виде {
за которым следует ноль или более пар ключ-значение и завершающий }
. Каждый ключ представляет собой строку с S
символ опущен, и каждое «значение» может быть любым элементом значения или типа контейнера.
В качестве альтернативы массивы и объекты могут указывать количество содержащихся в них элементов как #
за которым следует целое число перед их первым элементом, и в этом случае конечный ]
или же }
опущено. Кроме того, если все элементы имеют один и тот же тип, типы могут быть опущены и заменены одним $
за которым следует тип, и в этом случае сразу должно следовать количество элементов. Например, массив ["a", "b", "c"] может быть представлен как [
,$
,C
,#
,U
, 0x03,а
,б
,c
.
Двоичные данные
Хотя явного двоичного типа нет, двоичные данные хранятся в строго типизированный массив значений uint8. Это обеспечивает бинарную эффективность при сохранении совместимости с JSON, даже если JSON не имеет прямой поддержки бинарных данных.[3][4]
Представление
В Тип MIME Рекомендуется 'application / ubjson', как и расширение файла '.ubj' при хранении в файловой системе.[4]
Поддержка программного обеспечения
- Терадата База данных[5]
- В Язык Wolfram Language представила поддержку UBJSON в 2017 году с версией языка 11.1.[4]
Смотрите также
Рекомендации
- ^ «Типы значений | Универсальная двоичная спецификация JSON». Получено 20 июля 2019.
- ^ «Типы контейнеров | Универсальная двоичная спецификация JSON». Получено 20 июля 2019.
- ^ «Двоичные данные | Универсальная двоичная спецификация JSON». Получено 20 июля 2019.
- ^ а б c "UBJSON (.ubj) - документация на языке вольфрам". Получено 20 июля 2019.
- ^ «Формат хранения UBJSON». Получено 20 июля 2019.