返回空列表而不是null



我想更改当前函数以返回空的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)
}

我希望它返回[],我该怎么做?

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

数组和切片值编码为JSON数组,除了[]字节编码为base64编码的字符串, a nil slice编码为null JSON值

如果您想要一个非null空的JSON数组,请使用非nil空go slice。

请参阅此示例:

type Project struct {
    Name string `json:"name"`
}
enc := json.NewEncoder(os.Stdout)
var ps []*Project
enc.Encode(ps)
ps = []*Project{}
enc.Encode(ps)

输出(在Go操场上尝试):

null
[]

因此,在您的情况下,请确保projects不是nil,例如:

projects = ps
if projects == nil {
    projects = []*models.Project{}
}

处理此操作的另一种方法是检查切片是否为nil并初始化:

projects = ps
if projects == nil {
    projects = make([]*models.Project, 0)
}

如果您有几个带有数组的结构和结构,这可能很乏味。要处理这些,您可以创建自定义元帅或动态检查字段。

来源:GO中的数组和JSON

相关内容

  • 没有找到相关文章

最新更新