为了账号安全,请及时绑定邮箱和手机立即绑定

如何在golang中构建动态结构?

如何在golang中构建动态结构?

Go
慕娘9325324 2022-01-17 11:00:08
我有这个 json 文件,在这个 json 文件中,我们看到 A1,B1 有 n 个键...................... ...................................zn, a1,a2... ..................................................... ....................一个,b1 .................... ......................................................bn 等。     {        "_id": "5746992a54c1ae24d53ce651",        "A1": [            {                "a1": [                    "abc",                    "def",                    "ghi"                ]            },            {                "a2": [                    "abc",                    "def",                    "ghi"                ]            },    .    .    ,             {                "an": [                    "abc",                    "def",                    "ghi"                ]            }        ],        "B1": [            {                "b1": [                    "abc",                    "def",                    "ghi"                ]            },            {                "b2": [                    "abc",                    "def",                    "ghi"                ]            },            {                "bn": [                    "abc",                    "def",                    "ghi"                ]            }        ],    .    .    .    ,        "Bn": [            {                "b1": [                    "abc",                    "def",                    "ghi"                ]            },            {                "b2": [                    "abc",                    "def",                    "ghi"                ]如何在 golang 中调用它们的结构type Level1 struct {    TAGID     bson.ObjectId       `json:"_id" bson:"_id"`    LEVELTAG2 []Level2            `json:"level2" bson:"level2"`     }type LevelTag2 struct{        LEVEL3 []string           `json:"level3" bson:"level3"`}我在golang中构建这个结构是正确的方式还是其他方式请帮助我
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

当编译时密钥未知时,您实际上只能使用map[string]interface{}然后一些辅助函数来导航该结构。


如果键字面上是 a1、a2、a3 等......你可以制作一个实际的结构,但它不会很漂亮,因为你必须拼出每个键。


通常,当文档的键是数据的一部分时,您无法真正创建静态结构。


我所说的“部分数据”是指:


{

  "billy":23,

  "tommy":24

}

对比


[

  {"name":"billy", "age":23},

  {"name":"tommy", "age":24}

]

第二种形式可以表示为:struct { Name string, Age int }


而第一个实际上只能是: map[string]int 或 map[string]interface{} (如果结构很深)


查看完整回答
反对 回复 2022-01-17
?
达令说

TA贡献1821条经验 获得超6个赞

最好先定义所需的结构(将嵌套结构作为级别)。然后实现UnmarshalJSON([]byte) 错误接口将传入的数据转换为所需的结构。


我不想写很长的例子,除非我确定你想要什么 =) 我想采用与在 Go 中合并动态数据结构中使用的方法类似的方法。


你需要那些 "A1".."ZN", ("a1".."an")...("z1".."zn") 键吗?还是切片就足够了?喜欢:


type S struct {

    ID bson.ObjectId

    Data [][][]string

}

或者可能是内部转换 []string


[

   "abc",

   "def",

   "ghi"

]

对于某些结构,如果只有 3 个元素?


查看完整回答
反对 回复 2022-01-17
  • 2 回答
  • 0 关注
  • 306 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号