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