首页 > 解决方案 > 如何表示一个单例或集合的 oneof 值?

问题描述

考虑以下两个 JSON 格式的字段的有效值。output字段有时是单例,有时是集合。

1)

{
    "output": 3.1
}

2)

{
    "output": [3.1, 4.5]
}

这在 proto3 中可以表示吗?

我最接近的是这样的

message MyObject {
    oneof output {
       double output_value = 1;
       DoubleArray output_array = 2;
    }
}

message DoubleArray {
    repeated double values = 1; 
}

这会导致对象中的名称不同,并且还会向集合值添加嵌套。

标签: protocol-buffersproto

解决方案


不幸的是,从GH2592 开始,似乎考虑了重复的 oneofs 字段,但由于实施中的复杂性太多而最终被拒绝。

创建具有重复字段的包装消息(如您​​所做的那样)是此解决方案的规范解决方法。

message MyObject {
    oneof output {
       double value = 1;
       DoubleArray values = 2;
    }
}

message DoubleArray {
    repeated double values = 1;
}

推荐阅读