该JSON格式能否转换为gRPC Protobuf协议?嵌套List疑似不支持
嵌套列表JSON转gRPC Protobuf方案
Protobuf本身不支持直接定义重复的重复字段(即列表嵌套列表),但可以通过包装内层列表为独立消息来解决这个问题。以下是对应你提供的JSON的Protobuf协议定义:
syntax = "proto3"; package your.package; // 对应JSON中的matchInfor数组元素 message MatchInfo { string target_id = 1 [json_name = "targetId"]; float score = 2; float x = 3 [json_name = "X"]; float y = 4 [json_name = "Y"]; } // 对应JSON中的doInfos内层列表的元素 message DoInfo { int32 wd_id = 1 [json_name = "wdID"]; string apply_id = 2 [json_name = "applyId"]; repeated MatchInfo match_infor = 3 [json_name = "matchInfor"]; } // 包装内层列表的消息,解决嵌套列表问题 message DoInfoList { repeated DoInfo items = 1; } // 顶层消息,对应整个JSON结构 message DataPayload { int32 spd = 1; int32 ch_id = 2 [json_name = "chId"]; int32 sir = 3; repeated DoInfoList do_infos = 4 [json_name = "doInfos"]; }
关键说明:
- 嵌套列表处理:通过
DoInfoList消息包装内层的DoInfo列表,规避Protobuf不支持直接嵌套重复字段的限制。 - 字段映射:使用
json_name选项保持与原JSON驼峰字段名的兼容性,Protobuf内部采用下划线命名符合规范。 - 类型匹配:所有字段类型与JSON数据类型一一对应(整数用
int32,浮点数用float,字符串用string)。
基于该协议可生成gRPC客户端和服务端代码,完全兼容原JSON结构。
内容的提问来源于stack exchange,提问作者王志勇
相关产品推荐
相关产品推荐

