BSON в Extended JSON

О BSON

Что такое BSON?

BSON — бинарный формат сериализации документов MongoDB. Он хранит JSON-подобные документы с типизированными полями: ObjectId, датами, бинарными данными, регулярными выражениями, Timestamp, Decimal128 и 32-/64-битными числами.

Когда использовать BSON?

Используйте BSON при просмотре документов MongoDB, тестировании payload драйверов, отладке Extended JSON и переносе типизированных документов между системами, которые уже используют модель BSON.

BSON в JavaScript

import { deserialize, EJSON, serialize } from 'bson';

const value = EJSON.deserialize({ hello: 'world' });
const bytes = serialize(value);
const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');

console.log(hex);
// Output: 160000000268656c6c6f0006000000776f726c640000

console.log(EJSON.stringify(deserialize(bytes), { relaxed: false }, 2));
				

BSON в Go

package main

import (
	"fmt"

	"go.mongodb.org/mongo-driver/bson"
)

func main() {
	value := bson.D{{Key: "hello", Value: "world"}}
	encoded, _ := bson.Marshal(value)
	fmt.Printf("%x\n", encoded)
	// Output: 160000000268656c6c6f0006000000776f726c640000

	var decoded bson.M
	_ = bson.Unmarshal(encoded, &decoded)
	fmt.Println(decoded["hello"])
	// Output: world
}
				

BSON в PHP

<?php
$value = ['hello' => 'world'];
$encoded = MongoDB\BSON\fromPHP($value);
echo bin2hex($encoded) . PHP_EOL;
// Output: 160000000268656c6c6f0006000000776f726c640000

$decoded = MongoDB\BSON\toPHP($encoded);
echo $decoded->hello . PHP_EOL;
// Output: world