proto3处理二维数组会转换为map形式?-灵析社区

感觉对了

流程: * 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模式怎么看怎么别扭 谢谢

阅读量:147

点赞量:0

问AI
proto 并不支持多维数组。 不过,在它的 "well-know types" (https://link.segmentfault.com/?enc=4dkS7cl2zIOwUcZl7PWW%2BA%3D%3D.gR162Cuk80EjtvtIFmp3z7nyw%2BhhJ38zFd9GHyVDJNjBq40qwHzfYkQ5E4o9kUZnL837z9Q0y1xujf8Cuurf8w%3D%3D),通过 Value, ListValue, Struct 提供了对任意 Json 的支持。多维数组可以使用嵌套的 ListValue 的实现,但是结构的具体细节就不能在 proto 文件里体现了。(比如数组到底有几维,数组的元素到底是什么,以及你的 Tool_item message 在 proto 里就都没有了。)估计也不太能用 viper 自动处理了。