JSON ↔ Protobuf 工具箱
从 JSON 推断 .proto 模式,或用你的模式编码和解码 Protobuf 消息
粘贴 JSON 示例或加载示例,然后选择“生成 .proto”。
三种转换,各自独立
JSON → .proto 根据 JSON 示例推断 proto3 模式。JSON → Protobuf 使用你自己的 .proto 模式和消息类型把 JSON 消息编码为二进制,Protobuf → JSON 则把十六进制、base64 或二进制文件解码回 JSON。推断模式和真正的编码是不同的工作,因此各有独立模式。
模式如何推断
默认情况下,文本变为 string,布尔值变为 bool,小数变为 double,整数变为 int64,因为今天能放进 int32 的值明天未必可以。对象变为以键名 PascalCase 命名的消息,单一类型的数组变为 repeated 字段,数组中的所有对象会合并,以免漏掉可选键。只有 null、为空或类型混合的值使用 google.protobuf.Value,并列在说明中。字段编号按键的顺序分配;模式部署后,它们就是线上格式的一部分,不能再改。
编码与解码
JSON 使用 ProtoJSON 映射:lowerCamelCase 字段名,64 位整数为字符串,bytes 为 base64,枚举为名称,以及 Timestamp、Duration、Struct 和包装类型等常用类型的特殊形式。高级选项可以输出默认值、保留 proto 字段名、把枚举写为数字或忽略未知 JSON 字段。解码时会列出所选消息未声明的字段编号,这通常说明选错了消息类型。
限制与隐私
模式必须自包含:已内置 Google 常用类型(Timestamp、Duration、Struct、Any、Empty、FieldMask 和包装类型),其他导入绝不会从网络获取。单个示例无法揭示枚举、映射、存在性或演进计划,因此请审核每个推断出的模式。所有处理都在浏览器中进行;消息和模式不会上传。
