返回空列表而不是null

问题描述 投票:0回答:1

我想更改当前函数以返回空JSON列表,目前它返回nil

这是我目前的代码:

func (s *Service) projectsGet(c *gin.Context) {
    var projects []*models.Project

    user := getUser(c)
    pag := models.NewPagination(c)

    ps, err := s.db.ProjectsGet(user.ID, &pag)
    if err != nil {
        apiError(c, http.StatusInternalServerError, err)
        return
    }

    projects = ps
    c.JSON(http.StatusOK, projects)
}

我想要它返回[],我怎么能这样做?

json go null slice
1个回答
5
投票

nil切片编码为null JSON对象。这在json.Marshal()记录:

数组和切片值编码为JSON数组,但[]字节编码为base64编码的字符串,而nil切片编码为空JSON值。

如果你想要一个非null空JSON数组,请使用非nil空Go切片。

看这个例子:

type Project struct {
    Name string `json:"name"`
}

enc := json.NewEncoder(os.Stdout)

var ps []*Project
enc.Encode(ps)

ps = []*Project{}
enc.Encode(ps)

输出(在Go Playground上试试):

null
[]

所以在你的情况下,确保projects不是nil,例如:

projects = ps
if projects == nil {
    projects = []*models.Project{}
}
© www.soinside.com 2019 - 2024. All rights reserved.