Python protobuf解码base64字符串

az *_*rnd 7 python protocol-buffers

我正在尝试从加密的 Base64 字符串中获取 JSON 数据。我已经创建了我的原型文件,如下所示

syntax = "proto2";

message ArtifactList {
    repeated Artifact artifacts = 1;
}

message Artifact {
    required string id = 1;
    required uint64 type_id = 2;
    required string uri = 3;
}
Run Code Online (Sandbox Code Playgroud)

之后,我使用 proto 命令生成了 python 文件。我正在尝试解密 Base64 字符串,如下所示。

import message_pb2

import base64
data = base64.b64decode("AAAAAA8KDQgTEBUgBCjln62lxS6AAAAAD2dycGMtc3RhdHVzOjANCg==")

s = str(data)
message_pb2.ArtifactList.ParseFromString(s)
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误。

Traceback (most recent call last):
  File "app.py", line 7, in <module>
    message_pb2.ArtifactList.ParseFromString(s)
TypeError: descriptor 'ParseFromString' requires a 'google.protobuf.pyext._message.CMessage' object but received a 'str'
Run Code Online (Sandbox Code Playgroud)

我是 protobuf 的新手。我找不到解决此问题的解决方案。

有人可以帮助解决这个问题吗?

提前致谢。

小智 1

ParseFromString 是 protobuf Message实例上的一个方法。

尝试:

message = message_pb2.ArtifactList()
message.ParseFromString(s)
Run Code Online (Sandbox Code Playgroud)