编程语言
首页 > 编程语言> > Protobuf到python中的json

Protobuf到python中的json

作者:互联网

我有一个对象,我在Python中使用protobuf反序列化.当我打印对象时,它看起来像一个python对象,但是当我尝试将其转换为json时,我遇到了各种各样的问题.

例如,如果我使用json.dumps(),我得到的对象(来自protoc的生成代码)不包含_ dict _错误.

如果我使用jsonpickle我得到UnicodeDecodeError:’utf8’编解码器无法解码位置97中的字节0x9d:无效的起始字节.

下面的测试代码使用jsonpickle,错误如上所示.

if len(sys.argv) < 2:
    print ("Error: missing ser file")
    sys.exit()
else :
    fileLocation = sys.argv[1]

org = BuildOrgObject(fileLocation) 

org = org.Deserialize()


#print (org)
jsonObj = jsonpickle.encode(org)
print (jsonObj)

解决方法:

我建议使用google的protobuf库中的protobuf↔json转换器:

from google.protobuf.json_format import MessageToJson

jsonObj = MessageToJson(org)

请参阅protobuf包API:https://developers.google.com/protocol-buffers/docs/reference/python/(参见模块google.protobuf.json_format).

请注意,您也可以将protobuf序列化为Dict

from google.protobuf.json_format import MessageToDict
dict_obj = MessageToDict(org)

标签:python,json,protocol-buffers
来源: https://codeday.me/bug/20191004/1853117.html