Universal Binary JSON is a binary serialization format for JSON values. It supports typed numbers, strings, arrays, objects, binary byte arrays, and optimized typed containers.
Use UBJSON when you need compatibility with systems that already emit Universal Binary JSON, especially for numeric arrays or typed binary data. For new protocols, compare library support against MessagePack and CBOR.
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