Protobuf3: сериализация объекта Python в JSON

Согласно инструкции, Protobuf 3.0.0 поддерживает сериализацию JSON:

Четко определенная кодировка в JSON как альтернатива двоичному протокодированию.

Что я пробовал

  • json.dumps(instance) который поднял TypeError(repr(o) + " is not JSON serializable")
  • Искал instance.to_json() (или похожая) функция
  • Искал документы Python

Как мне сериализовать объектный объект Python в JSON?

2 ответа

Решение

Есть функция MessageToJson в json_format модуль. Эта функция может быть использована для сериализации сообщения.

Предостережения

Я по ошибке установил protobuf3 - Я думал это, ну, protobuf3 Пакет Python, но это неофициальный пакет Python 3 protobuf 2, а не наоборот. Удалите его, прежде чем начать.

Решение

После некоторых проб и ошибок работает следующее решение. Не стесняйтесь размещать лучшие / официальные, если у вас есть.

Необходимое условие: Protobuf 3

  • Удалить protobuf2 (Я использовал brew uninstall). Удостовериться protoc не появляется в пути.
  • Установите protobuf3 двоичные файлы. Пока нет пакета homebrew, поэтому я использовал бинарные файлы 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

  • Создать виртуальную среду
  • Скачать мастер ветку 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)
{
...
}
Другие вопросы по тегам