如何修复Protobuf解析JSON时的字段不存在错误
解决Protobuf解析JSON字段不匹配错误
错误原因
当前Protobuf结构和目标JSON格式完全不匹配:JSON里my_services是一个以服务名称(如service1、serviceN)为键的对象,每个值都包含entities字段;但原Protobuf把my_services映射成PrettyList,而PrettyList只有一个entities字段,层级对应不上才触发了解析错误。
修正后的Protobuf定义
调整结构使其完全适配JSON格式:
message PrettyRequest { // 直接用map存储服务名称到对应实体的映射,替代原有的PrettyList map<string, ServiceEntity> my_services = 1; } // 对应JSON中单个服务的结构,包含entities字段 message ServiceEntity { map<string, RepeatedValue> entities = 1; } message RepeatedValue { repeated Value val = 1; } message Value { oneof val { bytes bytes_val = 1; string string_val = 2; int32 int32_val = 3; } }
调整说明
- 删掉冗余的
PrettyList和EntitiesDict,直接在PrettyRequest里定义my_services为map<string, ServiceEntity>,完美匹配JSON中my_services的键值结构 ServiceEntity对应JSON里每个服务的对象,包含entities字段,层级和JSON完全对齐- 保留
RepeatedValue和Value来处理数组类型的字段值(比如driver_id对应的数组)
调整后原Python代码无需修改,依然可以正常解析目标JSON。
内容的提问来源于stack exchange,提问作者mascai
相关产品推荐
相关产品推荐

