3

根据手册,Protobuf 3.0.0 支持 JSON 序列化:

JSON 中定义明确的编码,作为二进制 proto 编码的替代方案。

我试过什么

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

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

4

2 回答 2

5

注意事项

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

解决方案

经过反复试验,以下解决方案有效。如果有的话,请随意发布更好的/官方的。

先决条件:Protobuf 3

  • 删除protobuf2(我用过brew uninstall)。确保protoc没有出现在路径中。
  • 安装protobuf3二进制文件。还没有自制软件包,所以我使用了 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 安装

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

代码

相关功能MessageToJsongoogle.protobuf.json_format module

from google.protobuf import json_format
o = SomeProtobufClass()
print json_format.MessageToJson(o)
{
...
}
于 2016-08-03T10:49:55.827 回答
4

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

于 2016-08-03T10:11:10.520 回答