JSON 转 Proto 工具(支持嵌套与注释解析)
JSON 转 Proto 工具(支持嵌套与注释解析)
平时在做 gRPC 或者微服务的时候,经常需要写.proto文件。
但现实情况是,大多数时候我们手里已经有一份 JSON 数据结构了,再去手写 proto,其实有点重复劳动。
最近整理了一个 JSON 转 Proto 的工具,主要就是把这一步自动化,同时补了一些实际开发里比较有用的能力,比如嵌套解析、注释保留这些。
功能点
1. 嵌套 JSON 自动解析
支持递归解析 JSON 结构。
如果 JSON 里有对象嵌套、数组嵌套,会自动拆分成多个message,并建立引用关系,不需要手动去拆结构。
2. 数组自动识别为 repeated
像这种结构:
{"list":[{"name":"test"}]}会自动生成:
repeated Item list = 1;基本符合 proto 的使用习惯。
3. 注释解析(比较实用)
如果 JSON 里带有注释:
{"name":"test",// 姓名"age":10// 年龄}生成的 proto 会保留这些注释:
message GenerateObj { string name = 1; // 姓名 int32 age = 2; // 年龄 }这一点在接口文档或者多人协作时还是挺有用的。
4. JSON 格式校验
在转换之前会先做一层 JSON 校验。
如果有语法问题,会提示具体错误位置,避免生成错误的 proto。
示例
输入:
{"name":"test",// 姓名"age":10,// 年龄"addr":"四川成都",// 地址"cls_info":[{"name":"篮球班",// 班名"teacher":"张老师"// 老师},{"name":"美术班","teacher":"李老师"}]}输出:
message ClsInfo { string name = 1; // 班名 string teacher = 2; // 老师 } message GenerateObj { string name = 1; // 姓名 int32 age = 2; // 年龄 string addr = 3; // 地址 repeated ClsInfo cls_info = 4; // 班级 }使用场景
- 从已有 JSON 快速生成 proto
- gRPC 接口定义
- 数据结构建模
- 接口文档辅助生成
地址
https://gotool.top
一点说明
这个工具主要解决的是一件小事:
把「JSON → Proto」这一步做得更省事一点。
顺带把几个常见问题一起处理了:
- 嵌套结构自动拆
- 数组自动转 repeated
- 注释尽量保留
如果你平时会写 proto,这一步其实能省不少时间。
