【问题标题】:Protobuf3: Serialize a Python object to JSONProtobuf3:将 Python 对象序列化为 JSON
【发布时间】:2016-12-08 22:33:03
【问题描述】:

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

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

我尝试了什么

  • json.dumps(instance) 引发了TypeError(repr(o) + " is not JSON serializable")
  • 寻找instance.to_json()(或类似的)函数
  • 搜索了 Python 文档

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

【问题讨论】:

    标签: python json serialization protocol-buffers-3


    【解决方案1】:

    json_format 模块中有一个函数MessageToJson。这个函数可以用来序列化消息。

    【讨论】:

    • 谢谢。刚刚发现(见我自己的答案)。我的问题出在其他地方,在软件包安装中(安装了错误的)。
    【解决方案2】:

    注意事项

    我错误地安装了protobuf3 - 我以为它是protobuf3 Python 包,但它是一个非官方的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 branch of protobuf/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)
    {
    ...
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-03
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 2016-12-22
      相关资源
      最近更新 更多