部分 flatbuffers 数据到 json

Part of flatbuffers data to json

具有序列化对象 monster 的二进制数据,其中 monster 类型为:

 table Monster {
      name:string;
      color:Color;
      weapon:Weapon;       <--- serialize to json only this, discard other properties
}

能不能直接只把weapon转成json,其他的字段都舍弃了?

注意我的二进制数据是 Monster 类型。似乎序列化 weapon 的唯一方法是通过递归复制所有属性然后调用 json 序列化函数从 monster->weapon 构建单独的 Weapon 对象。

  1. Weapon 可以是字符串对象而不是Weapon 对象。该字符串可以解释为 JSON.
  2. 或者将字节数组作为武器类型,以放置任何二进制文件流。
  3. 或者更好地使用 flex-buffer 代替 json 以方便 json 但效率更高。

或者如果你不想改变你的模式,但仍然想要武器 json:

  1. 使用 flatc 提供的 json 转换实用程序将完整的 fb 数据转换为 json。
  2. 只需从完整的 json 中选择解析武器节点供您使用。

将二进制转换为 JSON 的函数 GenerateText 目前采用缓冲区指针,而不是根,因此不适用于您的用例。但是,如果您查看该函数的实现,则可以轻松创建这样的函数。

新的 "mini reflection" 功能可能更简单(请参阅评论和功能 minireflect.h)。这将允许您从任何 FlatBuffers table 生成 JSON,甚至不需要模式解析器。

  1. 使用 --gen-object-api
  2. 编译你的 fbs 文件
  3. 这将产生 WeaponT class 和其他 *T classes
  4. 使用monster->weapon()->UnpackTo(..)方法填充WeaponT实例
  5. 运行 Weapon::Pack(fbb, &weaponT) 序列化回一个新的 fbb 对象
  6. 运行 GenerateText 在最后一步创建的 fbb 对象上