You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Protobuf消息表示对象数组?是否必须采用嵌套方式实现?

如何用Protobuf表示对象数组

你尝试的第一种写法是完全不可行的,Protobuf的语法规则不允许直接用repeated message来定义类型。

为什么你的伪代码无效?

在Protobuf中,repeated是字段修饰符,只能用来标记某个字段是数组/列表类型,不能直接用来定义消息本身。你写的repeated message Response { ...Entry; }完全不符合语法规范,Protobuf编译器根本无法识别这种写法。

正确的实现方式

你提到的第二种嵌套写法才是Protobuf中表示对象数组的标准做法,也是唯一合规的方式:

syntax = "proto3";

// 定义单个对象的消息结构
message Entry {
  string firstKey = 1;
  string secondKey = 2;
}

// 用一个顶层消息包裹数组字段
message Response {
  repeated Entry data = 1; // repeated修饰Entry类型字段,代表这是Entry对象的数组
}

对应JSON结构说明

当你把这个Protobuf消息序列化为JSON时,会得到类似这样的结构:

{
  "data": [
    {"firstKey": "firstValue", "secondKey": "secondValue"},
    {"firstKey": "firstValue", "secondKey": "secondValue"}
  ]
}

这和你想要的数组结构几乎一致,只是多了一层data键——这是因为Protobuf要求所有序列化内容必须是一个完整的消息,不能直接以数组作为顶层结构,所以必须用一个消息来包裹你的数组字段。

内容的提问来源于stack exchange,提问作者Bartek Maciejiczek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 12:29:09