英文:
How to Add a field to struct golang using JEN package where fields depend on JSON
问题
循环遍历 JSON 并获取带有标签的 "name" 字段,然后将其添加到结构块中。
代码生成后的所需输出:
var queryOutput [][]struct {
product_name string `db:"product_name" json:"product_name"`
category string `db:"category" json:"category"`
category2 string `db:"category2" json:"category2"`
}
for _, yaxis := range YAxisColumn {
columns := yaxis.(map[string]interface{})
columnName := columns["name"].(string)
c := jen.Id(utils.GetFormattedName(columnName)).Int().Tag(map[string]string{
"json": GetFormattedName(columnName),
"db": GetFormattedName(columnName),
})
}
要添加 Y 轴列字段(即 name)的结构体:
return jen.Func().Id(serviceName).Params().Parens(
jen.List(jen.Interface(), jen.Error()),
).Block(
jen.Var().Id("queryOutput").Op("[][]").Struct(
jen.Id(utils.GetFormattedName(XAxisColumn)).String().Tag(map[string]string{
"json": utils.GetFormattedName(XAxisColumn),
"db": utils.GetFormattedName(XAxisColumn),
}),
),
)
JSON 数据:
"yAxisColumn": [
{
"name": "category",
"color": ""
},
{
"name": "category2",
"color": ""
}
]
英文:
Looping through the Json and getting the "name" field with tags and then adding it into a block of struct.
Required output after code generation
var queryOutput [][]struct {
product_name string `db:"product_name" json:"product_name"`
category string `db:"category" json:"category"`
category2 string `db:"category2" json:"category2"`
}
for _, yaxis := range YAxisColumn {
columns := yaxis.(map[string]interface{})
columnName := columns["name"].(string)
c:= jen.Id(utils.GetFormattedName(columnName)).Int().Tag(map[string]string{
"json": GetFormattedName(columnName),
"db": GetFormattedName(columnName),
}),
}
Struct in which to add the Yaxis columns fields i.e name
return jen.Func().Id(serviceName).Params().Parens(
jen.List(jen.Interface(), jen.Error()),
).Block(
jen.Var().Id("queryOutput").Op("[][]").Struct(
jen.Id(utils.GetFormattedName(XAxisColumn)).String().Tag(map[string]string{
"json": utils.GetFormattedName(XAxisColumn),
"db": utils.GetFormattedName(XAxisColumn),
}),
),
JSON
"yAxisColumn" : [
{
"name": "category",
"color": ""
},
{
"name": "category2",
"color":""
}
],
答案1
得分: 1
在jen包中使用名为StructFunc的函数。
使用后的输出为:
jen.Var().Id("queryOutput").Op("[]").StructFunc(
func(g *jen.Group) {
g.Add(jen.Id(utils.GetCamelCaseName(XAxisColumn)).String().Tag(map[string]string{
"json": utils.GetFormattedName(XAxisColumn),
"db": utils.GetFormattedName(XAxisColumn),
}))
for _, yaxis := range YAxisColumn {
columns := yaxis.(map[string]interface{})
columnName := columns["name"].(string)
c := jen.Id(utils.GetCamelCaseName(columnName)).Int().Tag(map[string]string{
"json": utils.GetFormattedName(columnName),
"db": utils.GetFormattedName(columnName),
})
g.Add(c)
}
},
)
英文:
Use a function named as StructFunc in jen package.
Output after using
jen.Var().Id("queryOutput").Op("[]").StructFunc(
func(g *jen.Group) {
g.Add(jen.Id(utils.GetCamelCaseName(XAxisColumn)).String().Tag(map[string]string{
"json": utils.GetFormattedName(XAxisColumn),
"db": utils.GetFormattedName(XAxisColumn),
}))
for _, yaxis := range YAxisColumn {
columns := yaxis.(map[string]interface{})
columnName := columns["name"].(string)
c := jen.Id(utils.GetCamelCaseName(columnName)).Int().Tag(map[string]string{
"json": utils.GetFormattedName(columnName),
"db": utils.GetFormattedName(columnName),
})
g.Add(c)
}
},
),
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论