【问题标题】:array of struct object not getting return in response [duplicate]结构对象数组在响应中没有得到返回[重复]
【发布时间】:2021-04-30 21:57:23
【问题描述】:

我的模型有以下数据:

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,
        })
    })

它试图使用邮递员调用它:localhost:8080/subjects/1001 但它只显示 {} {} 而不是主题结构的对象数组。

输出: { "学生证": "1001", “主题”: [ {}, {} ] }

【问题讨论】:

  • 您需要导出字段,以便json 包可以对其进行编码,例如NameSectionnamesection。如果您希望它们在响应中为小写,您可以使用 json 标记,例如Name string `json: "name"`.

标签: go go-gin golang-migrate


【解决方案1】:

这是因为您的Subject 使用小写字段namesection,因此不会被序列化。

改成:

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

将显示字段:

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

【讨论】:

  • 由于您的标签,主题对象的 JSON 中的键实际上是小写的。
  • 你是对的。我从他那里复制了这一部分。将其写为json:name 似乎根本不会使其小写。我会将其编辑为(假定)预期的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 2020-01-10
相关资源
最近更新 更多