我有一个像这样被称为类的结构。
type ClassDetails struct {
ClassNumber int `json:"classNumber"`
Names []string `json:names`}
我手动创建了这样的东西。
type Subject struct {
Math ClassDetails `json:"math"`
Science ClassDetails `json:"science"`}
我想在飞行中这样做。在获取信息时向Subject添加更多ClassDetails,但我不能使用类型类的数组。 如何才能做到这一点?我还需要将类的名称添加为json标记。 我得到的结构应该包含这样的值。
{
"classes": {
"school": "MayorWestHigh",
"math": [{
"classNumber": "1",
"names": ["aaron", "baron", "cathy"]
},
{
"classNumber": "2",
"names": ["aaron", "baron", "cathy"]
}
],
"science": [{
"classNumber": "1",
"names": ["ted", "baron", "isiah"]
}],
"geography": [{
"classNumber": "1",
"names": ["peter", "glen", "joe"]
}]
}
}
答案 0 :(得分:2)
不是静态地定义每个主题,而是简单地使用主题名称中的地图=>班级细节的数组?
通过使用如上所述的地图,并通过将地图嵌入到结构中,您可以非常接近所需的JSON,如下所示:
type ClassDetails struct {
ClassNumber int `json:"classNumber"`
Names []string `json:names`
}
type Subjects map[string][]ClassDetails
type Classes struct {
School string `json:"school"`
Subjects
}
上面的Classes
结构的一个实例将填写所需JSON的以下部分:
{
"classes": {
... the Classes instance goes here...
}
}
剩余的外部对象可以按如下方式构造:
c := Classes{...}
outer := map[string]Classes{"classes": c}
outer
对象的JSON编组,初始化正确的数据,几乎完全达到你的JSON(为了完全匹配你必须将ClassNumber
转换为字符串类型)
这是一个Go Playground链接,可以使用您想要的确切数据初始化这些结构并打印出您的JSON:https://play.golang.org/p/HFMbHtY2os
编辑:这仍然与您问题中的JSON不完全匹配,因为它会在其中添加一个名为“Subjects”的新对象。问题是JSON中"classes"
内的对象混合了类型,Go不能声明动态结构域。
如果您真的必须使用该JSON结构,则需要使用更通用的map[string]interface{}
来允许对象层次结构中同一级别的混合类型。这是另一个具有正确实现的Go Playground链接:https://play.golang.org/p/rlYTYGofSI