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