如何在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 个元素?
我有这个 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 个元素?