首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以从protobuf pb2文件生成JSON/Dict对象吗?

可以从protobuf pb2文件生成JSON/Dict对象吗?
EN

Stack Overflow用户
提问于 2021-04-01 13:11:48
回答 2查看 503关注 0票数 0

我正在试图找出一个protobuf描述符或对象是否可以从由pb2生成的prototool文件中转换为JSON/Dict对象。这就是我到目前为止所做的:

我用config_pb2.py.

  • Now编写了一个以TopConfig作为消息的config.proto文件,运行

  • 来生成,我想在中生成一个带有TopConfig默认值的JSON/Dict对象

代码语言:javascript
复制
from google.protobuf.json_format import MessageToDict, MessageToJson
import config_pb2.py

j = MessageToJson(config_pb2.py.TopConfig())
d = MessageToDict(config_pb2.py.TopConfig())

这在这两种情况下都会产生一个空的{}字典。我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-01 20:58:15

好吧,所以我自己想出来了。

我的错误是,我的TopConfig中只嵌套了其他messages,而没有其他数据字段。MessageToDict只适用于未嵌套的messages,也不会显示enumoneof数据。

代码语言:javascript
复制
MessageToDict(config_pb2.py.TopConfig())  # Will produce {}
MessageToDict(config_pb2.py.LowestConfig())  # Will produce {'k1': v1, 'k2': v2}

请注意,它不会显示nested messagesenumoneof,您可以很容易地进行逻辑检查。

代码语言:javascript
复制
config_pb2.py.TopConfig().DESCRIPTOR.oneofs  # True if it has oneofs type
config_pb2.py.TopConfig().DESCRIPTOR.enum_types  # True if it has enum type

希望这篇文章能对未来的人有所帮助。

票数 -1
EN

Stack Overflow用户

发布于 2021-04-06 21:05:18

json_format将省略"unset“字段。在您的示例中,TopConfig()创建一个空的TopConfig实例,即没有设置字段。因此,{}是该对象的正确JSON表示。

但是,有一个including_default_value_fields to MessageToDict几乎就是您想要的:

代码语言:javascript
复制
including_default_value_fields: If True, singular primitive fields,
  repeated fields, and map fields will always be serialized.  If
  False, only serialize non-empty fields.  Singular message fields
  and oneof fields are not affected by this option.

我说“几乎”是因为空的子消息字段仍然不存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66905193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档