Protobuf3:将Python对象序列化为JSON

时间:2016-08-03 09:26:23

标签: python json serialization protocol-buffers-3

根据the manual,Protobuf 3.0.0支持JSON序列化:

  

JSON中定义良好的编码,作为二进制原型编码的替代方法。

我尝试了什么

  • json.dumps(instance)提出了TypeError(repr(o) + " is not JSON serializable")
  • 寻找instance.to_json()(或类似)功能
  • 搜索了Python文档

如何将Python proto对象序列化为JSON?

2 个答案:

答案 0 :(得分:3)

MessageToJson模块中有一个函数json_format。此函数可用于序列化消息。

答案 1 :(得分:3)

注意事项

我错误地安装了protobuf3 - 我认为它是protobuf3 Python包,但它是一个非官方的 Python 3 protobuf 2包,而不是相反。在开始之前将其删除。

解决方案

经过一些试验和错误后,以下解决方案有效。如果您有任何更好/官方的,请随意发布。

先决条件:Protobuf 3

  • 删除protobuf2(我使用brew uninstall)。确保protoc未显示在路径中。
  • 安装this explanation二进制文件。还没有自制程序包,所以我使用了OSX二进制文件protoc-3.0.0-osx-x86_64.zipmake脚本也是一个选项。
    • bin目录的内容复制到/usr/local/bin
    • include的内容复制到/usr/local/include
  • 确保安装了protobuf3 - protoc --version应显示libprotoc 3.0.0

Python安装

  • 创建虚拟环境
  • protobuf3下载到/tmp
  • 激活虚拟环境
  • cd protobuf-master/python && setup.py install

代码

MessageToJson中的相关功能为google.protobuf.json_format module

from google.protobuf import json_format
o = SomeProtobufClass()
print json_format.MessageToJson(o)
{
...
}