JSON 转 Proto 工具(支持嵌套与注释解析)

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 接口定义
  • 数据结构建模
  • 接口文档辅助生成

地址

https://gotool.top


一点说明

这个工具主要解决的是一件小事:

把「JSON → Proto」这一步做得更省事一点。

顺带把几个常见问题一起处理了:

  • 嵌套结构自动拆
  • 数组自动转 repeated
  • 注释尽量保留

如果你平时会写 proto,这一步其实能省不少时间。

相关推荐
波力海苔夹心脆67512 小时前
C# 序列化与反序列化详解:System.Text.Json、Newtonsoft.Json、XmlSerializer 用法、特性选项与安全实践
经验分享·后端·c#·json·.net
数据狐(Datafox)1 天前
淘宝商品详情API实战:多语言代购商城自动同步数据完整方案
开发语言·前端·数据库·爬虫·json
阿钱真强道2 天前
21 嵌入式操作系统 | JSON 与 json-c:生成与解析
c语言·开发语言·json·json-c
譕痕8 天前
JSONObject与JSONArray封装数据格式区别
java·json
A黄俊辉A8 天前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
伞伞悦读8 天前
【第37期】Python JSON 与配置详解:序列化、反序列化、嵌套结构和配置文件
开发语言·python·json
Mikko78 天前
jackson-databind 升到 2.21.6 就安全了吗?jackson-core 是另一个坐标,它那条 high 全局库至今没收
java·后端·安全·json
天若有情67310 天前
独立开发复盘:我用 Node.js 做了个在线工具箱
前端·json·工具
Asurplus11 天前
【SpringBoot4】3、从SpringBoot4升级Sa-Token1.46.0报错
redis·sa-token·json·jackson·springboot4
代码中介商11 天前
C++ 预约系统实战(三):服务端实现——libevent 事件驱动与业务路由
c++·json·c/s