【问题标题】:Python protobuf decode base64 stringPython protobuf 解码 base64 字符串
【发布时间】:2020-12-26 22:39:26
【问题描述】:

我正在尝试从加密的 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;
}

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

import message_pb2

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

s = str(data)
message_pb2.ArtifactList.ParseFromString(s)

但我收到以下错误。

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'

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

谁能帮忙解决这个问题?

提前致谢。

【问题讨论】:

  • 你为什么用我的回答删除了另一个问题?
  • @jps 我问了一个问题,这是错误的。这就是我删除它的原因。但你的答案是正确的。
  • 你对这个问题有什么想法吗?
  • @jps 现在我收到此错误。你有什么想法吗?
  • 我收到此错误:- google.protobuf.message.DecodeError: Wrong wire type in tag.。谁能帮忙

标签: python proto


【解决方案1】:

ParseFromString 是 protobuf 消息 instance 上的一个方法。

试试:

message = message_pb2.ArtifactList()
message.ParseFromString(s)

【讨论】:

  • 我收到此错误:- google.protobuf.message.DecodeError: Wrong wire type in tag. 谁能帮忙?
【解决方案2】:

有两个问题。

  1. ParseFromString 是 ArtifactList 实例的方法
  2. ParseFromString 将一个类似字节的对象,而不是 str,作为参数
>>>import message_pb2
>>>import base64
>>>data = base64.b64decode("AAAAAA8KDQgTEBUgBCjln62lxS6AAAAAD2dycGMtc3RhdHVzOjANCg==")
>>>m=message_pb2.ArtifactList()
>>>m.ParseFromString(data)
>>>m.artifacts
<google.protobuf.pyext._message.RepeatedCompositeContainer object at 0x7fd09a937d68>

【讨论】:

    猜你喜欢
    • 2011-10-18
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多