为什么python protobuf json_format.Parse引发TypeError?

时间:2018-07-27 14:11:14

标签: python protocol-buffers

我正在尝试将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?

谢谢!

1 个答案:

答案 0 :(得分:0)

在进一步分析json_format.Parse()函数之后,我意识到自己正在滥用API

Parse(bools_as_json, proto.bool_pb2.BoolArray )

应该真的是:

Parse(bools_as_json, proto.bool_pb2.BoolArray() )

API要求填充消息 instance ,而不是填充消息类型。一切都按预期进行。