默认情况下如何将消息字段设置为“无”

时间:2019-07-03 14:23:05

标签: python-3.x protocol-buffers

我使用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"
}

0 个答案:

没有答案