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, поэтому я использовал бинарные файлы OSXprotoc-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)
{
...
}