登录
首页 >  Golang >  Go问答

gin 框架可以获取像“mapinterface{}”这样的 json post 数据,而不是与结构体绑定吗?

来源:stackoverflow

时间:2024-03-16 14:09:21 193浏览 收藏

在使用 Gin 框架开发 API 时,如何直接获取客户端发布的 JSON 数据中的 map[string]interface{} 类型数据,而无需将其绑定到结构体中,成为一个常见的问题。本文将介绍一种解决方法,通过读取请求体中的 []bytes,再使用 json.Unmarshal() 函数将其转换为 map[string]interface{} 类型数据,从而实现数据的直接获取。这种方法可以有效地处理客户端发送的任意 JSON 数据,简化了 API 的开发和使用。

问题内容

正如标题所说,我正在编写一个 API,采用客户端发布的任何 json 数据。

有没有办法直接获取像bson.M这样的map[string]interface{}类型数据?

我尝试简单地查找 gin.Context 的属性,如果我错过了某些内容,其中任何一个都会有帮助吗?


解决方案


  1. 直接从请求体中获取[]bytes
  2. 使用 json.unmarshal()[]bytes 转换为类似 json 的数据:map[string]interface{}
func GetJsonData(c *gin.Context) {
    data, _ := ioutil.ReadAll(c.Request.Body)
    fmt.Println(string(data))

    var jsonData bson.M  // map[string]interface{}
    data, _ := ioutil.ReadAll(c.Request.Body)
    if e := json.Unmarshal(data, &jsonData); e != nil {
        c.JSON(http.StatusBadRequest, gin.H{"msg": e.Error()})
        return
    }
    c.JSON(http.StatusOK, jsonData)
}

到这里,我们也就讲完了《gin 框架可以获取像“mapinterface{}”这样的 json post 数据,而不是与结构体绑定吗?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>