记一次flatbuffer的使用,自动匹配json和fbs文件结构,成功后转为bin

在参数众多的Web工程中,通过XML或JSON管理参数更新对齐变得困难。采用FlatBuffer来解决这一问题,利用其scheme文件约束参数版本,确保前端与后台同步。将JSON转换为bin文件提高传输效率,并通过Python读取bin文件验证数据。
摘要由CSDN通过智能技术生成

项目场景:

   在做一个参数外置的web工程,因为参数多达上千个,所以必须用一种较好的方式管理起来。最开始用xml或json也是可以满足,但是一旦有参数更新对齐就会变得比较麻烦。所以采用flatbuffer来校验参数个数和参数的类型。

例如:项目场景:
— 前端与后台运行同步参数更新

问题描述

提示:这里描述项目中遇到的问题:

例如:程序内部新增了多个参数,工程更新内部运行代码后需要同步到前端 ,这个字段新增,且类型为枚举或数组。也有可能出现web漏传。


解决方案:

我们以flatbuffer中的scheme文件作为标准,以此来约束参数的版本。前端通过json保存传递数据。
转为bin文件后,给到内部执行程序,bin传输快,且由flatbuffer转的bin必须要有flatbuffer文件才能解析,更好的保密。
示例如下。

fbs文件test.fbs


```c

```clike
> namespace Fltest;
> 
> table Car{
>     id:int;
>     number:long;
>     describle:string; } table Person{
>     id:int;
>     name:string;
>     code:long;
>     isVip:bool;
>     carList:[Car]; } table RootType{
>     items:[Person];
>     stateid:int;
>     time:long;
> 
> }
> 
> root_type RootType;

相对应json文件如下

{
    "items": [{
        "id": 1001,
        "name": "张三",
        "code": 1222,
        "carList": [{
            "id": 10001,
            "number": 123456321,
            "describle": "这是张三第一辆车"
        }]

    }, {
        "id": 1002,
        "name": "李四",
        "code": 1123,
        "carList": [{
            "id": 10001,
            "number": 123456001,
            "describle": "这是李四第一辆车"
        }, {
            "id": 10002,
            "number": 123456002,
            "describle": "这是李四第二辆车"
        }, {
            "id": 10003,
            "number": 123456003,
            "describle": "这是李四第三辆车"
        }]

    }],
    "stateid":404,
    "time":20161127
}

然后执行命令flatc -b test.fbs test.json 匹配成功的话就会自动生成test.bin文件 啦。
如果不成功会报如下类似错误。可以试试在json里面写一个不存在的字段,就会转bin失败。如下错误
flatbuffer Bin文件的读取 python示例
第一步,需要用fbs生成python代码,flatc -p test.fbs
第二步,将python代码和flatbuffer中的python部分(下载flatbuffer代码里面有)都放到项目中
第三步,编写代码,如下所示

import RootType 
import Car,Person
buf = open('D:/test.bin', 'rb').read()
buf = bytearray(buf)
monster = RootType.RootType.GetRootAsRootType(buf, 0)
# RootType.
print(monster)
print(monster.Time())

就会输出json中的time了
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值