我使用protobuf生成一些消息,并希望将某些字段设置为“无”。因此,当我将消息转换为字典(调用MessageToDict函数)时,字典将包含值为None的键。
工作流程是:消耗kafka(使用kafka-python)->从kafka消息解析(使用ParseFromString)->转换为dict(使用MessageToDict) 最后两步基于protobuf。
我们的测试人员使用python进行此操作,开发人员使用golang。但是我们发现消息仅包含使用python和golang时不为空的字段,消息将包含所有字段,即使它为空。空字段将自动填充为空。
我尝试将ListFields转换为dict之前,空字段消失了。由于kafka消息不可读,因此无法检查空白字段是否消失。然后,我还尝试手动创建包含空白字段的protobuf消息,进行打印,发现空白字段消失了。因此,现在怀疑protobuf消息会忽略空字段吗?
代码1。
>>>obj = xxx_pb2.Info(x=None, y={"blob": b"334"})
>>>obj
y {
blob: "334"
}
code2。
>>>obj = xxx_pb2.Info(x={}, y={"blob": b"334"})
>>>obj
x {
}
y {
blob: "334"
}
我希望代码1的输出为:
>>>obj
x: None
y {
blob: "334"
}