3

マニュアルによると、Protobuf 3.0.0 は JSON シリアル化をサポートしています。

バイナリ proto エンコーディングの代替として、JSON で明確に定義されたエンコーディング。

私は何を試しましたか

  • json.dumps(instance)上げたTypeError(repr(o) + " is not JSON serializable")
  • instance.to_json()(または類似の)関数を探しました
  • Pythonのドキュメントを検索しました

Python proto オブジェクトを JSON にシリアル化するにはどうすればよいですか?

4

2 に答える 2

5

注意事項

間違ってインストールprotobuf3してしまいました - Python パッケージだと思っていましたprotobuf3が、これは非公式のPython 3 protobuf 2 パッケージであり、その逆ではありません。始める前に取り除いてください。

解決

試行錯誤の後、次の解決策が機能します。より良い/公式のものがある場合は、自由に投稿してください。

前提条件: プロトブフ 3

  • 削除しますprotobuf2(使用しbrew uninstallました)。protocがパスに表示されていないことを確認してください。
  • protobuf3バイナリをインストールします。自作パッケージはまだないので、OSX バイナリを使用しprotoc-3.0.0-osx-x86_64.zipました。makeスクリプトもオプションです 。
    • 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 に答える