json schema生成工具_go 实现json 生成idl

json 是一种很方便直观的数据格式,非常方便业务开发,特别是若类型语言,比如php。

但是对于数据密集型应用,数据治理是一个很头疼的问题,通过idl生成dto是一种很常见的方式。

如何获得idl呢?

第一种方式是手工获取,通过对json数据的理解,手动编写对应的idl,有两个问题:

1,工作量大,很容由于拼写、大小写问题导致字段错误、重复、缺失,修改测试工作量大

2,风格难统一,不同人的思路、代码风格都不一致,很多人不愿意写注释,后期维护难度大

第二总方式就是自动生成。

我们知道,通过idl我们可以方便生成目标代码和文档,非常方便数据管理,但是通过数据生成idl 是一个比较难的问题,因为数据丢失了schema信息,要想恢复schema必须加上很多自定义策略,通过json生成idl也是如此。

1,比如idl中数字有 i32,i64,float,double 等类型,在json中只有float64类型

2,比如对json中的null,原来的数据类型很难确定。

我们定义如下策略:

1,针对浮点格式数据,统一生成double类型

2,针对整数类型,如果长度小于10,统一生成i32,否则i64

3,null类型统一生成空结构体,用户按需调整

4,json数据统一生成注释,格式:// eg: xxx

定义好上述策略以后,我们可以根据线上日志,得到json格式的业务数据

然后用我们的工具生成idl,工具地址

https://github.com/xiazemin/jsonToAll

使用方式

./jsonToIdl toIdl -j ../t.json -d .或者./jsonToIdl toIdl -j ../t.json

比如我们的json数据t.json

[{  "description" : "An imaginary server config file",  "logs" : {"level":"verbose", "dir":"/var/log"},  "host" : "antlr.org",  "admin": ["parrt", "tombu"],  "aliases": [  ],  "Spaces": { },  "keys":[1,2,3,4],  "null_": null,  "bool_": true,  "structs":[{"a":"a","b":"2","c": 12345678901,    "d": 1.2345678,    "f": 1e-123,     "g": 112,  "h": 0,  "non_camel_Style": null,    "non_camel_Style_string": "non_camel_Style_string"}]}]

使用我工具生成后的格式如下

namespace php json.to.idl struct  Logs {1: string level //eg:"verbose"2: string dir //eg:"/var/log"}struct Aliases{}struct  Spaces {}struct Null{}struct NonCamelStyle{}struct Structs{1: string a //eg:"a"2: string b //eg:"2"3: i64 c //eg:123456789014: double d //eg:1.23456785: double f //eg:1e-1236: i32 g //eg:1127: i32 h //eg:08: NonCamelStyle non_camel_Style //eg:null9: string non_camel_Style_string //eg:"non_camel_Style_string"}struct GeneratedStruct {1: string description //eg:"An imaginary server config file"2: Logs logs3: string host //eg:"antlr.org"4: list<string> admin5: list aliases6: Spaces Spaces7: list keys8: Null null_ //eg:null9: bool bool_ //eg:true10: list structs}struct GeneratedArr { 1:  list generatedStruct }

然后我们可以在微调后很方便地生成我们希望格式 的数据。

当然对于很相似的数据我们想得到并集、差集,小工具也可以支持

./jsonToIdl union -l ../t.json -r ../t.json

./jsonToIdl diff -l ../t.json -r ../t.json

68ea58f814079c70546cbb3e90480607.png

30851e7498e446f69ab82a907bd72f6d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值