【问题标题】:Deserialize Protobuf 3 bytearray in python在python中反序列化Protobuf 3字节数组
【发布时间】:2017-07-06 18:53:55
【问题描述】:

如何通过 bytearray 响应以字符串形式读取 Protobuf 消息?

我尝试查找 Protobuf 库。 https://developers.google.com/protocol-buffers/docs/reference/python/google.protobuf.message-pysrc#Message.MergeFrom

当我尝试 mergeFrom 时, mergeFromString 来获取响应。我遇到了错误。

TypeError:MergeFrom() 的参数必须是同一类的实例:预期 GetUpdateResponseMsg 得到字节。

我尝试了 ParseFromString api,但没有得到响应。

我正在尝试将 Protobuf 反序列化为人类可读的格式。

还有什么我可以尝试的吗?

【问题讨论】:

    标签: python-3.x protobuf-3


    【解决方案1】:

    您需要反序列化响应。将 class/protobuf 类型与消息一起传递,您应该得到格式的响应.. 示例是:

    from BusinessLayer.py.GetDealUpdateData_pb2 import GetDealUpdateResponseDM
    from importlib import import_module
    def deserialize(byte_message, proto_type):
        module_, class_ = proto_type.rsplit('.', 1)
        class_ = getattr(import_module(module_), class_)
        rv = class_()
        rv.ParseFromString(byte_message)
        return rv
    
    print (deserialize(byte_message, 'BusinessLayer.py.GetDealUpdateData_pb2.GetDealUpdateResponseDM'))
    

    byte_message 是您将收到的消息作为响应。

    如果您有任何问题,请告诉我。

    【讨论】:

    • 嗨@Anand 这个方法对我不起作用,并给我错误'字段号 0 是非法的'。在 java 中有一种方法可以解析 bytearray 'fromByteArray;我在 python 中找不到类似的方法。你能帮忙吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    相关资源
    最近更新 更多