当前位置: 首页 > 知识库问答 >
问题:

go - proto3处理二维数组会转换为map形式?

任昊阳
2024-05-13

流程:

  • json作为数据
  • viper解析
  • grpc通信

json:

{ ...省略其他"toolbar": {    "column": [      [        {          "name": "",          "role": ""        }      ]    ],    "row": []  }}

proto:

message Tool_bar {    message Tool_item {        string name = 1;        string role = 2;    }    message Array2D {        repeated Tool_item inner_array = 1;    }    repeated Array2D column = 1;}

生成的go代码

type ConfigReply_Array2D struct {    ...    InnerArray []*ConfigReply_ToolItem `protobuf:"bytes,1,rep,name=inner_array,json=innerArray,proto3" json:"inner_array,omitempty"`}type ConfigReply_ToolBar struct {    ...    Column  []*ConfigReply_Array2D `protobuf:"bytes,1,rep,name=column,proto3" json:"column,omitempty"`    ...}

目前卡在viper解析proto文件生成的struct报错:
'Toolbar.Column[0]' expected a map, got 'slice'\n*

原因很简单,viper需要的是

type ToolBar struct {    Name   string   `json:"name"`    Role   string   `json:"role"`}type Xxx struct {  ToolBar struct {      Column  [][]ToolBar `json:"column"`      Row     [][]ToolBar `json:"row"`  } `json:"toolbar"`}

生成的代码却多了一个InnerArray

请问,这该怎么办?
最好不要改json格式,需要的就是二维数组,改成map模式怎么看怎么别扭

谢谢

共有1个答案

庄瀚玥
2024-05-13

proto 并不支持多维数组。

不过,在它的 well-know types,通过 Value, ListValue, Struct 提供了对任意 Json 的支持。多维数组可以使用嵌套的 ListValue 的实现,但是结构的具体细节就不能在 proto 文件里体现了。(比如数组到底有几维,数组的元素到底是什么,以及你的 Tool_item message 在 proto 里就都没有了。)估计也不太能用 viper 自动处理了。

 类似资料:
  • 问题内容: 我已经有了用于将一维二维转换为一维二维的代码,但是我不知道如何将其转换。这是我的代码: 问题答案: 您正在寻找类似的东西: 与以下内容相同: 但试图帮助进一步解释这个概念。

  • 问题内容: 我想通过指定2D数组中的列数将一维数组转换为二维数组。可能会像这样工作: numpy是否具有与我的虚构函数“ vec2matrix”相似的功能?(我知道您可以像2D数组一样索引1D数组,但这不是我拥有的代码中的选项- 我需要进行此转换。) 问题答案: 您要阵列。 其中,根据输入数组的大小推断新维的大小。

  • 本文向大家介绍java 遍历Map及Map转化为二维数组的实例,包括了java 遍历Map及Map转化为二维数组的实例的使用技巧和注意事项,需要的朋友参考一下 java 遍历Map及Map转化为二维数组的实例 实例代码: 输出结果为: 如有疑问请留言或者到本站社区交流讨论,大家共同进步,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 在C++中将二维字符数组复制到一维数组字符串中最简单的方法是什么? 大概是这样的: 问候蒂尔曼

  • 问题内容: 我有这种数组 我需要将其转换为一维数组。我怎样才能做到这一点? 例如这样 任何内置函数的php均可用于此数组转换? 问题答案: 对于您有限的用例,可以这样做: 当子数组对此有很多条目时,可以将其更一般化:

  • 问题内容: 我正在尝试将嵌套列表转换为2d数组。 我想把它做成一个。我尝试了以下方法: 有没有可行的方法?请注意,直到运行时我才知道列表的大小,并且列表可能会锯齿。 问题答案: 没有简单的内置方法可以执行所需的操作,因为您只能返回存储在list中的元素数组,在您的情况下也可以是list。 最简单的解决方案是创建二维数组,并用每个嵌套列表的结果填充它。 (如果您像使用Alex一样将Java8与流一起