При преобразовании объекта flatbuffers в JSON, как работать с двоичными данными?

Допустим, у меня есть такая схема fbs:

table SomeItem
{
    module_version:string;
    message_id:[uint8];
    some_other_id:[uint8];
    event_time_us:uint64;
    message:string;
}

Это пример, реальная структура намного, намного больше. Поэтому мне нужно получить эти данные из другого модуля в формате fbs, преобразовать их в JSON, а затем отправить клиенту в виде HTTP-ответа.

Проблема касается этих бинарных полей данных. Насколько я знаю, вы просто не можете отправить JSON с необработанными двоичными данными, вы должны его закодировать (например, в Base64). И я бы с удовольствием это сделал, но только если бы структура данных была достаточной сложности. Он настолько большой, что не составляет труда использовать встроенный конвертер Flatbuffers Obj-To-JSON, но библиотека flatbuffers не поддерживает кодирование/декодирование Base64 для полей двоичных данных.

Так что у меня остается один вариант:

Вручную создайте JSON-представление объекта flatbuffers и обработайте все данные, как мне заблагорассудится (преобразуйте поля двоичных данных в формат base64 и поместите их в JSON), но это займет очень много времени.

Есть ли способ просто использовать встроенный конвертер flatbuffers и каким-то образом передать результат JSON HTTP-клиенту?


person Nikita128    schedule 04.05.2021    source источник


Ответы (1)


[uint8] при преобразовании в JSON будет отображаться в виде списка, например. [1, 2, 3], где каждое из этих чисел представляет один байт.

Попробуйте с flatc --json myschema.fbs -- myflatbuffer.bin

Как правило, FlatBuffers может конвертировать любые данные в JSON.

person Aardappel    schedule 04.05.2021