在protobuf中编码地图列表?

Posted

技术标签:

【中文标题】在protobuf中编码地图列表?【英文标题】:Enconde a list of maps in protobuf? 【发布时间】:2019-07-09 13:27:00 【问题描述】:

背景

我正在尝试将 protobuff 用于我们的一个应用程序,但我无法理解协议,我需要帮助来创建一个 .proto 文件。

数据

我需要编码的数据是地图列表,结构如下:

[
  
    "AwayTeam": "Osasuna",
    "Date": "2017-05-07",
    "Div": "SP1",
    "FTAG": 1,
    "FTHG": 4,
    "FTR": "H",
    "HTAG": 0,
    "HTHG": 2,
    "HTR": "H",
    "HomeTeam": "Valencia",
    "Season": 201617
  ,
  
    "AwayTeam": "Osasuna",
    "Date": "2016-02-27",
    "Div": "SP2",
    "FTAG": 1,
    "FTHG": 0,
    "FTR": "A",
    "HTAG": 0,
    "HTHG": 0,
    "HTR": "D",
    "HomeTeam": "Cordoba",
    "Season": 201516
  
]

每张地图的结构如下:


  "AwayTeam": string,  required: true
  "Date":     string,  required: true
  "Div":      string,  required: true
  "FTAG":     integer, required: true
  "FTHG":     integer, required: true
  "FTR":      string,  required: true
  "HTAG":     integer, required: true
  "HTHG":     integer, required: true
  "HTR":      string,  required: true
  "HomeTeam": string,  required: true
  "Season":   integer, required: true

研究

我的目标是使用proto3 创建 .proto 文件。所以我决定阅读 .proto3 文件的文档:

https://developers.google.com/protocol-buffers/docs/proto3#maps

但我更加困惑。根据文档,我不能拥有包含不同类型值的地图:

https://developers.google.com/protocol-buffers/docs/proto3#maps

为此,我需要 JSON object 类型的等效项,并检查 .struct.proto 的文档,但该页面没有提及任何相关内容。

问题

所以我在这里很迷失。如何在.proto 中表示提到的数据结构?

【问题讨论】:

【参考方案1】:

回答

事实证明,我实际上并不需要地图,对象列表(消息)就足够了:

    syntax = "proto3";

    message Result 
      string AwayTeam = 1;
      string Date = 2;
      string Div = 3;
      int32 FTAG = 4;
      int32 FTHG = 5;
      string FTR = 6;
      int32 HTAG = 7;
      int32 HTHG = 8;
      string HTR = 9;
      string HomeTeam = 10;
      int32 Season = 11;
  

  message Response 
    repeated Result results = 1;
  

【讨论】:

以上是关于在protobuf中编码地图列表?的主要内容,如果未能解决你的问题,请参考以下文章

Protobuf-net 反序列化开放街道地图

Protobuf 地图不断为 arena 分配新元素

我需要用 Protobuf 存储长度信息吗?

Protobuf如何提升编码效率

protobuf 怎么查看版本

详解Google-ProtoBuf中结构化数据的编码