首页 > 解决方案 > 各种类型的相同protobuf消息字段名称

问题描述

我正在尝试设置一个protobuf与模式匹配的协议json。架构由json几个相互引用的对象组成。其中一个对象PV具有一个属性value,根据架构,该属性可以是字符串、布尔值或另一个对象,S. 我对如何protobuf在保留名称的同时在模式中定义它有疑问value。问题是通过Python 对象解析json遵循json模式的文件。protobuf

我试过了

message PV{
    oneof value{
        string stringValue=3;
        bool boolValue=4;
        S sValue=5;
    }
}

这会导致以下错误:

Message type "PV" has no field named "value"

当试图将json遵循json模式的文件解析protobuf为 Python 对象时。

我也试过:

message PV{
    google.protobuf.Any value=2;

}

没有成功。

问题是:是否可以扭曲protobuf保留消息的字段名称,在我的情况下为值,但让它成为包括其他消息在内的多种类型?

先感谢您!

标签: jsonprotocol-buffers

解决方案


查看python生成的代码:https ://developers.google.com/protocol-buffers/docs/reference/python-generated#oneof

oneof 名称(在您的情况下为“值”)不会生成到任何字段中。在您的情况下google.protobuf.Value,可能是正确的解决方案。


推荐阅读