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

how to build dynamic structure in golang?

我有这个 json 文件,在这个 json 文件中有 n 个密钥,如我们所见 A1,B1...................................... ...................... zn, a1,a2 ............................................... ........................一个, b1................................................ .........十亿 等等

     {
        "_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"
                ]
            },
            {
                "bn": [
                    "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 构建这个结构是正确的方式还是其他方式 请帮帮我

如果键在编译时未知,您真的只能使用 map[string]interface{} 然后使用一些辅助函数来导航该结构。

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

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

"part of the data" 我的意思是:

{
  "billy":23,
  "tommy":24
}

[
  {"name":"billy", "age":23},
  {"name":"tommy", "age":24}
]

第二种形式可以表示为: struct { 姓名字符串,年龄 int }

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

最好先定义您的想要的结构(以嵌套结构为层次)。然后实现 UnmarshalJSON([]byte) error 接口以将传入数据转换为所需的结构。

我不想写很长的例子,除非我确定你想要什么 =) 我想采用与 .

中使用的类似方法

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

type S struct {
    ID bson.ObjectId
    Data [][][]string
}

或者可以转换为内部 []string

[
   "abc",
   "def",
   "ghi"
]

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