Go 结构对象数组未在响应中获取返回

Go 结构对象数组未在响应中获取返回,go,go-gin,golang-migrate,Go,Go Gin,Golang Migrate,我的模型具有以下数据: package main type Subject struct { name string `json:name` section int `json:section` } var subjects = map[string][]Subject{ "1001": []Subject{ { name: "Phy", sec

我的模型具有以下数据:

package main

type Subject struct {
    name    string `json:name`
    section int     `json:section`
}

var subjects = map[string][]Subject{
    "1001": []Subject{
        {
            name:    "Phy",
            section: 1,
        },
        {
            name:    "Phy",
            section: 2,
        },
    },
    "1002": []Subject{
        {
            name:    "Chem",
            section: 1,
        },
        {
            name:    "Chem",
            section: 2,
        },
    },
    "1003": []Subject{
        {
            name:    "Math",
            section: 1,
        },
        {
            name:    "Math",
            section: 2,
        },
    },
    "1004": []Subject{
        {
            name:    "Bio",
            section: 1,
        },
        {
            name:    "Bio",
            section: 2,
        },
    },
}
我创建的路线如下所示:

route.GET("/subjects/:id", func(c *gin.Context) {
    
        id := c.Param("id")
        subjects := subjects[id]

        c.JSON(http.StatusOK, gin.H{
            "StudentID": id,
            "Subject":  subjects,
        })
    })
它试图使用postman将其命名为:localhost:8080/subjects/1001 但它只显示{}{},而不是subject结构的对象数组

输出: { “学生ID”:“1001”, “主题”:[ {}, {} ]
}这是因为您的
主题
使用小写字段
name
部分
,因此不会序列化

将其更改为:

类型主题结构{
名称字符串`json:“名称”`
Section int`json:“Section”`
}
将显示以下字段:

{
  "StudentID": "1001",
  "Subject": [
    {"name":"Phy","section":1},
    {"name":"Phy","section":2}
  ]
}

您需要导出字段,以便
json
包可以对其进行编码,例如
Name
Section
vs
Name
Section
。如果您希望它们在响应中是小写的,那么可以使用json标记,例如
名称字符串`json:`Name`
。由于您的标记,json中主题对象的键实际上是小写的。您是对的。这部分是我从他那里抄来的。把它写成
json:name
似乎一点也不小写。我将按(假设)的预期方式编辑它。