You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Go/Chi中解析带数组的JSON请求体并关联结构体

解决Go/Chi中POST请求JSON数组解析为空的问题

你的问题核心在于结构体的JSON标签格式错误,冒号后面多了空格,导致标准库encoding/json无法正确将JSON字段映射到结构体字段,最终Books切片保持默认的空值。

1. 修正结构体JSON标签

把结构体标签里冒号后的空格全部去掉,正确格式是json:"字段名",修正后的结构体如下:

type AuthorRequest struct{
    Name string `json:"name"`
    BornDate string `json:"bornDate"`
    Books []BookRequest `json:"books"`
}

type BookRequest struct{
    Title string `json:"title"`
    PublishYear string `json:"publishYear"`
}

2. 完善错误处理(推荐)

当前代码的错误处理仅做日志,建议在解析失败时返回明确的HTTP错误响应,方便调试:

func CreateAuthorAndBooks(w http.ResponseWriter, r *http.Request) {
    var authorPayload api.AuthorRequest
    decoder := json.NewDecoder(r.Body)
    err := decoder.Decode(&authorPayload)

    if err != nil{
        w.Header().Set("Content-Type", "application/json")
        w.WriteHeader(http.StatusBadRequest)
        json.NewEncoder(w).Encode(map[string]string{"error": "无效的请求体格式: " + err.Error()})
        return
    }

    successMessage := fmt.Sprintf("%v 拥有 %v 本书: %v", authorPayload.Name, len(authorPayload.Books), authorPayload.Books)
    response := map[string]string{"success": successMessage}
    w.Header().Set("Content-Type", "application/json")
    
    err = json.NewEncoder(w).Encode(response)
    if err != nil{
        w.WriteHeader(http.StatusInternalServerError)
        // 记录内部错误日志
    }

    // 转换为存储用结构体的逻辑示例
    var author Author
    author.Name = authorPayload.Name
    bornDate, _ := time.Parse("2006-01-02", authorPayload.BornDate)
    author.BornDate = bornDate

    for _, bookReq := range authorPayload.Books {
        publishYear, _ := strconv.ParseInt(bookReq.PublishYear, 10, 32)
        author.Books = append(author.Books, Book{
            Title: bookReq.Title,
            PublishYear: int32(publishYear),
        })
    }
    // 后续存储逻辑...
}

为什么标签空格会导致问题?

Go的结构体标签是严格的键值对语法:key:"value",如果冒号后加空格,encoding/json会将 "name"(包含前导空格)视为键的一部分,无法匹配JSON中的"name"字段,因此对应的结构体字段会被忽略,使用默认零值(切片默认是空切片)。

内容的提问来源于stack exchange,提问作者Richard Wright

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:46:14