Часть данных буфера в JSON
Наличие двоичных данных сериализованного объекта monster
, где monster
Тип:
table Monster {
name:string;
color:Color;
weapon:Weapon; <--- serialize to json only this, discard other properties
}
могу ли я напрямую трансформировать только weapon
JSON и отменить другие поля?
Обратите внимание, что мои двоичные данные имеют тип Monster
, Кажется, единственный способ сериализации weapon
это построить отдельный Weapon
объект из monster->weapon
путем рекурсивного копирования всех свойств и последующего вызова функций сериализации json.
3 ответа
- Скомпилируйте ваш файл FBS с
--gen-object-api
- Это будет производить
WeaponT
класс и прочее*T
классы - использование
monster->weapon()->UnpackTo(..)
способ заселенияWeaponT
пример - Бежать
Weapon::Pack(fbb, &weaponT)
сериализовать обратно на новый объект FBB - Бежать
GenerateText
на объекте fbb, созданном на последнем шаге
- Оружие может быть строковым объектом вместо оружия. Эта строка может быть интерпретирована как JSON.
- ИЛИ положить байтовый массив как тип оружия, чтобы поместить любой поток двоичных файлов.
- ИЛИ лучше использовать flex-буфер вместо json для простоты json, но все же лучшую эффективность.
Или, если вы не хотите менять свою схему и все еще хотите использовать оружие как json:
- Преобразуйте полные данные fb в json с помощью утилиты преобразования json, предоставленной flatc.
- Просто выберите разбор узла оружия из полного JSON для вашего использования.
Функция GenerateText
который преобразует двоичный файл в JSON, в настоящее время принимает указатель буфера, а не корень, поэтому не подойдет для вашего варианта использования. Однако такую функцию можно легко создать, если вы посмотрите на реализацию этой функции.
Возможно, проще будет новая функциональность "мини-отражения" (см. Комментарии и функции minireflect.h
). Это позволит вам сгенерировать JSON из любой таблицы FlatBuffers, даже не требуя синтаксического анализатора схемы.