首页 新闻 会员 周边

请问python grpc proto格式如何返回不同类型的列表

0
悬赏园豆:10 [待解决问题]

新手求教,例如列表中有None和数字
[None, None, None, None, None, 1, 3, None, None, None, None, None]
在proto文件中如果定义

import "google/protobuf/struct.proto";
message TestResponse {
    google.protobuf.ListValue result = 1;
}

在服务函数如何定义

def test(**kwargs):
    result = [None, None, None, None, None, 1, 3, None, None, None, None, None]
    return {"result": result}

在官网中找到这些但不知如何用
https://developers.google.com/protocol-buffers/docs/reference/python-generated#any

不识少年愁的主页 不识少年愁 | 初学一级 | 园豆:62
提问于:2022-05-17 18:03
< >
分享
所有回答(1)
0

如果您想使用 protobuf 实现这个功能,可以将 None 值作为 NullValue 或 Option 类型的值返回,而将数字作为 Int32Value 类型的值返回。这样您就可以使用 protobuf 的 ListValue 类型包含这两种类型的值了。

以下是 proto 文件和 Python 代码的示例:

proto 文件:

import "google/protobuf/struct.proto";
import "google/protobuf/wrappers.proto";

message TestResponse {
repeated google.protobuf.Value result = 1;
}

Python 代码:

from google.protobuf import struct_pb2, wrappers_pb2

def test():
result = [None, None, None, None, None, 1, 3, None, None, None, None, None]
values = []
for value in result:
if value is None:
values.append(struct_pb2.Value(null_value=struct_pb2.NULL_VALUE))
else:
values.append(struct_pb2.Value(number_value=value))
return {"result": values}

在这个示例中,我们使用 protobuf 中的 Value 类型代替 ListValue 类型来存储结果列表。对于 None 值,我们使用 null_value 字段存储 NullValue 值;对于数字,我们使用 number_value 字段存储 Int32Value 值。最后,我们将所有值存储在一个列表中,并将其包含在 TestResponse 消息中返回

Technologyforgood | 园豆:5534 (大侠五级) | 2023-04-10 21:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册