Как установить поле сообщения на None по умолчанию - PullRequest
0 голосов
/ 03 июля 2019

Я использую protobuf для генерации некоторого сообщения и хочу установить для некоторых полей значение None в сообщении.Поэтому, когда я преобразую сообщение в dict (вызов функции MessageToDict), в dict будет включен ключ, значение которого равно None.

рабочий процесс: потреблять kafka (использовать kafka-python) -> анализировать из сообщения kafka (использовать ParseFromString) -> преобразовывать в dict (использовать MessageToDict) последние два шага основаны на protobuf. * ​​1003 *

Наш тестер использует для этого python, разработчик использует golang.Но мы обнаружили, что сообщение включает только поле, которое не пусто при использовании python и golang, в сообщение будут включены все поля, даже если оно пустое.Пустое поле автоматически заполнится нулем.

Я пытался преобразовать ListFields, прежде чем преобразовать его в dict, пустые поля исчезли.Из-за того, что сообщение кафки не читается человеком, не может проверить, пропали ли пустые поля или нет.А потом я также попытался создать протобуф-сообщение, включающее пустые поля вручную, распечатать его, обнаружил, что пустые поля пропали.Так что теперь подозревать, что сообщение protobuf игнорирует пустые поля?

code1.

>>>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"
}

Я ожидаю, что выходные данные code1 будут:

>>>obj
x: None
y {
  blob: "334"
}
...