如何为PHP项目中的动态JSON对象编写对应proto定义
Protobuf封装方案
针对你给出的JSON结构,最适配的方案是使用Protobuf内置的google.protobuf.Struct类型承载context字段,该类型原生对应任意JSON对象结构,支持你提到的所有取值类型(整数、浮点数、字符串、布尔、嵌套字典、数组)。
完整的proto定义示例如下:
syntax = "proto3"; // 导入Protobuf官方内置的Struct类型定义 import "google/protobuf/struct.proto"; message BizObject { string name = 1; string type = 2; google.protobuf.Struct context = 3; }
PHP端使用说明
- 用PHP官方
protobuf扩展操作时,不需要手动处理Struct内部结构,直接把PHP关联数组赋值给context字段即可,扩展会自动完成数组和Struct类型的互相转换 - 如果你的业务场景只需要透传
context内容不需要解析,可以把context字段定义为string/bytes类型,直接存储原始JSON字符串,性能比Struct类型更高,但会丢失Protobuf的类型校验能力
特殊场景适配
如果context字段可能出现顶层非对象的情况(比如直接是数组、字符串、数字等),可以把字段类型替换为google.protobuf.Value,该类型可以适配所有JSON类型的取值。
内容的提问来源于stack exchange,提问作者srvr4vr
相关产品推荐
相关产品推荐

