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