UBJSON — маркерное бинарное кодирование JSON-значений. Конвертер декодирует null и логические значения, целые и вещественные типы, числа высокой точности, символы и строки, массивы, объекты, no-op-маркеры, типизированные контейнеры и контейнеры со счетчиком, а также оптимизированные uint8-массивы; при кодировании доступны JSON-обертки для binary, int64, float64 и высокой точности.
Используйте UBJSON прежде всего для существующих интеграций. Убедитесь, что другая сторона поддерживает типизированные контейнеры $ и контейнеры со счетчиком #, а также маркер высокой точности H; конвертер создает контейнеры со счетчиком и оптимизированные uint8-массивы и отклоняет неподдерживаемые маркеры или лишние байты.
const UBJSON = require('ubjson');
// The npm package is legacy; use it mainly for compatibility with existing UBJSON data.
const value = { hello: 'world' };
const buffer = Buffer.alloc(1024);
const offset = UBJSON.packToBufferSync(value, buffer);
const encoded = buffer.subarray(0, offset);
console.log(encoded.toString('hex'));
UBJSON.unpackBuffer(encoded, (error, decoded) => {
if (error) throw error;
console.log(decoded);
});
package main
import (
"fmt"
"github.com/jmank88/ubjson"
)
func main() {
value := map[string]any{"hello": "world"}
encoded, _ := ubjson.Marshal(value)
fmt.Printf("%x\n", encoded)
var decoded map[string]any
_ = ubjson.Unmarshal(encoded, &decoded)
fmt.Println(decoded["hello"])
// Output: world
}
<?php
// PHP does not have a widely used maintained UBJSON package.
// This writes the common optimized uint8 array form used for binary payloads.
$bytes = "\x01\x02\x03";
$encoded = '[' . '$' . 'U' . '#' . 'U' . chr(strlen($bytes)) . $bytes;
echo bin2hex($encoded) . PHP_EOL;
// Output: 5b2455235503010203