我想更改当前函数以返回空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)
}
我想要它返回[]
,我怎么能这样做?
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{}
}