Часть данных буфера в 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 ответа

Решение
  1. Скомпилируйте ваш файл FBS с --gen-object-api
  2. Это будет производить WeaponT класс и прочее *T классы
  3. использование monster->weapon()->UnpackTo(..) способ заселения WeaponT пример
  4. Бежать Weapon::Pack(fbb, &weaponT) сериализовать обратно на новый объект FBB
  5. Бежать GenerateText на объекте fbb, созданном на последнем шаге
  1. Оружие может быть строковым объектом вместо оружия. Эта строка может быть интерпретирована как JSON.
  2. ИЛИ положить байтовый массив как тип оружия, чтобы поместить любой поток двоичных файлов.
  3. ИЛИ лучше использовать flex-буфер вместо json для простоты json, но все же лучшую эффективность.

Или, если вы не хотите менять свою схему и все еще хотите использовать оружие как json:

  1. Преобразуйте полные данные fb в json с помощью утилиты преобразования json, предоставленной flatc.
  2. Просто выберите разбор узла оружия из полного JSON для вашего использования.

Функция GenerateText который преобразует двоичный файл в JSON, в настоящее время принимает указатель буфера, а не корень, поэтому не подойдет для вашего варианта использования. Однако такую ​​функцию можно легко создать, если вы посмотрите на реализацию этой функции.

Возможно, проще будет новая функциональность "мини-отражения" (см. Комментарии и функции minireflect.h). Это позволит вам сгенерировать JSON из любой таблицы FlatBuffers, даже не требуя синтаксического анализатора схемы.

Другие вопросы по тегам