exH*_*ash 41 python json protocol-buffers
我有一个protobuf在Python中反序列化的对象.当我打印对象时,它看起来像一个python对象,但是当我尝试将其转换为json我有各种各样的问题时.
例如,如果我使用json.dumps()我得到的对象(从protoc生成的代码)不包含_ dict _错误.
如果我使用jsonpickle,我会得到UnicodeDecodeError: 'utf8' codec can't decode byte 0x9d in position 97: invalid start byte.
下面的测试代码使用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)
Run Code Online (Sandbox Code Playgroud)
小智 100
我建议使用google的protobuf库中的protobuf↔json转换器:
from google.protobuf.json_format import MessageToJson
jsonObj = MessageToJson(org)
Run Code Online (Sandbox Code Playgroud)
请参阅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)
Run Code Online (Sandbox Code Playgroud)
Kev*_*ill 12
如果您需要直接访问json,请查看protobuf-to-json库,但您必须手动安装它.
但我建议您使用protobuf-to-dict库,原因如下:
pip install protobuf-to-dict或包含在一个requirements.txtdict 可以转换为json,可能比json字符串更有用| 归档时间: |
|
| 查看次数: |
40304 次 |
| 最近记录: |