Why does python protobuf json_format.Parse throw a TypeError?
我正在尝试将 protobuf 序列化为 JSON。我用以下消息制作了一个简单的 proto 文件:
1 2 3 4 5 6 7 8 | syntax ="proto3"; message Bool { bool data = 1; } message BoolArray { repeated Bool bools = 1; } |
然后我运行一些基本代码来构建消息,推送到 Json,然后将其读回:
1 2 3 4 5 6 | 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 函数会抛出一个
google.protobuf.json_format.ParseError: Failed to parse bools field:
unbound method ClearField() must be called with BoolArray instance as
first argument (got str instance instead).
我跟踪了 Parse 函数,这个错误在 Google 的
谢谢!
进一步分析
1 | Parse(bools_as_json, proto.bool_pb2.BoolArray ) |
应该是:
1 | Parse(bools_as_json, proto.bool_pb2.BoolArray() ) |
API 期望填充一个消息实例,而不是消息的类型。一切都按预期工作。