有没有办法从嵌套字典初始化协议缓冲区? (在 Python 中)

Is there a way to initialize a Protocol Buffer from a nested dictionary? (in Python)

协议缓冲区有一个方法可以将单个 pb 实例转换为 JSON 对象。

https://googleapis.dev/python/protobuf/latest/google/protobuf/json_format.html

但是这个方法有逆向吗?我想要一种从通用数据结构或 JSON 文档初始化新 Protocol Buffer 实例的方法?

背景:我收到消息总线的数据馈送。此提要上的消息在 XML 中提供。供应商提供 XML 模式。我已经将这些 XSD 转换为等效的 .protos - 现在我想将此提要上发送的每条消息都转换为等效的 Protobuf 消息。

这样做的好处是消息更小,我们存储在我们这边的成本更低。我正在寻找从 XML 的内容中初始化新 Protobuf 对象的方法,最好是在单个操作中。

编辑:follow on question 与以下建议相关。

您可以使用 parse 来做到这一点

复制粘贴:

google.protobuf.json_format.Parse(文本,消息,ignore_unknown_fields=False,descriptor_pool=None)¶ 将协议消息的 JSON 表示解析为消息。 参数

文本 – 消息 JSON 表示。

message – 要合并到的协议缓冲区消息。

ignore_unknown_fields – 如果为真,则不要为未知字段引发错误。

descriptor_pool – 用于解析类型的描述符池。如果 None 使用默认值。

Returns 相同的消息作为参数传递。 加薪:: ParseError:关于 JSON 解析问题。