python-3.x - Protobuf 和 Python : How to add messages to "repeatable Any" field?

标签 python-3.x protocol-buffers grpc protoc protobuf-3

我有一个原型(prototype)消息:

syntax = "proto3";

import "google/protobuf/any.proto";

message Task {
    repeated google.protobuf.Any targets = 1;
    // ...
}

message Target {
    string name = 1;
    // ...
}

我应该如何将 Target 消息添加到 Task.targets 中?

在官方文档中,我找到了有关如何为单个 Any 赋值的信息类型值,但在我的例子中,我有 repeated Any 字段类型。

编辑:Task.targets 可能包含不同类型的目标,这就是使用Any 类型的原因。单个 Target 消息仅用于最小的可重现示例。

最佳答案

感谢@Justin Schoen。根据https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/Any ,您需要先创建一个 Any 对象,然后在将其附加到重复列表之前打包一个 Target(或任何其他对象类型)。

from google.protobuf.any_pb2 import Any
task = Task()
target = Any()
target.Pack(Target())
task.targets.append(any)

关于python-3.x - Protobuf 和 Python : How to add messages to "repeatable Any" field?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56425327/

相关文章:

python - 如何使用 Windows 操作系统从 .pkl 文件获取数据

java - 如何处理 Java 中未知的 protobuf 字段?

c++ - Protocol Buffer : no notation for fixed size buffers?

protocol-buffers - 不带参数的 Protobuf RPC 服务方法

protocol-buffers - 从使用 protoc 生成的 pb2.py 逆向工程 .proto 文件

python-3.x - 如何将多个单元格合并为一个文本单元格

python - 使 tkinter 文本小部件适合窗口

python - 如何更改 Dash (Plotly) 中的语言/区域设置或 Plotly 工具栏的标签?

spring-boot - 如何使用 gRPC 拦截器在 Spring-Boot 应用程序中附加/更新日志记录 MDC

c# - 我真的需要整个 Grpc.Core NuGet 包才能在简单的 C# 应用程序中使用 Google PubSub