我正在尝试将protobuf序列化为JSON。我用以下消息制作了一个简单的原始文件:
syntax = "proto3";
message Bool {
bool data = 1;
}
message BoolArray {
repeated Bool bools = 1;
}
然后我运行一些基本代码来构建消息,推送至Json,然后重新阅读:
pb_bool_array = pb_bool.BoolArray()
b = pb_bool_array.bools.add()
b.data = True
bools_as_json = MessageToJson( pb_bool_array )
Parse(bools_as_json, proto.bool_pb2.BoolArray )
但是Parse函数抛出一个带有以下消息的TypeError
:
google.protobuf.json_format.ParseError:无法解析布尔字段: 必须使用BoolArray实例调用未绑定方法ClearField() 第一个参数(改为使用str实例)。
我跟踪了Parse函数,此错误在Google json_format
代码的第519行触发。为什么会发生此TypeError?我是否在原始规范中缺少某些内容和/或滥用python API?
谢谢!
答案 0 :(得分:0)
在进一步分析json_format.Parse()
函数之后,我意识到自己正在滥用API。
Parse(bools_as_json, proto.bool_pb2.BoolArray )
应该真的是:
Parse(bools_as_json, proto.bool_pb2.BoolArray() )
API要求填充消息 instance ,而不是填充消息类型。一切都按预期进行。