如何创建支持多根类型的FlatBuffer JSON文件
多根类型FlatBuffer JSON文件创建方案
报错原因
FlatBuffer 解析JSON时默认要求明确匹配根表结构,你当前的Schema既没有声明全局root_type,解析时也没有手动指定根类型,就会抛出no root type set to parse json with错误。
两种实现方案
方案1:解析时临时指定根类型(无需修改Schema)
调用flatc工具时添加--root-type参数指定对应根表名即可,适合单类型JSON解析场景:
- 解析Login类型JSON:
flatc --json --root-type Login your_schema.fbs -- login_data.json - 解析Attack类型JSON:
flatc --json --root-type Attack your_schema.fbs -- attack_data.json
方案2:Schema内定义联合根类型(支持单JSON适配多类型)
如果需要在统一JSON结构下兼容所有根类型,可以修改Schema添加联合类型作为全局根:
- 修改后的Schema示例:
table Login { name:string; password:string; } table Attack { damage:short; } // 定义包含所有可能根类型的联合 union RootMessage { Login, Attack } // 封装联合类型的根表 table MessageRoot { msg: RootMessage; } // 声明全局根类型 root_type MessageRoot;
- 对应JSON格式:
- Login类型JSON:
{ "msg_type": "Login", "msg": { "name": "a", "password": "a" } }- Attack类型JSON:
{ "msg_type": "Attack", "msg": { "damage": 300 } }
该方案不需要每次解析时指定根类型,工具会自动根据msg_type字段匹配对应表结构。
额外注意
你给出的JSON示例中password字段末尾多了冗余逗号,标准JSON不支持尾随逗号,建议删除避免额外解析报错。
内容的提问来源于stack exchange,提问作者coordinate
相关产品推荐
相关产品推荐

