问答

Golang 的 echo 框架中,接收 Json 数组的问题

作者:admin 2021-09-18 我要评论

概述:golang 的 echo 框架,参数是一段 Json 的数组,但会得到错误信息 binding element must be a struct 代码示意如下: package usersimport ( "github.com/...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

概述:golang 的 echo 框架,参数是一段 Json 的数组,但会得到错误信息 binding element must be a struct

代码示意如下:

package users

import  (
    "github.com/labstack/echo/v4"
)

type (
    RequestBody struct  {
        Id      int     `json:"id"`
        Name    string  `json:"name"`
        Age     Int     `json:"age"`
    }
}

func Person(c echo.Context) error {
    var user []RequestBody
    
    if err := c.Bind(&user); err != nil {
        return err.Error() // 此处为示意
    }
}

参数 Json 如下:

[
    {
        "id": 1,
        "name": "xiaoming",
        "age": 13
    },
    {
        "id": 2,
        "name": "xiaohong",
        "age": 19
    }
]

执行此代码会得到错误信息:binding element must be a struct

求问,在 echo 框架中,接收 Json 数组,正确的方法应该怎样?

###
req := new([]RequestBody)
if err := c.Bind(&req); err != nil {
        return echo.NewHTTPError(http.StatusBadRequest, err)
    }

你看行不行

###

如果传递的数据是form表单形式,用c.Bind是可以的。
单传递Json数据,那请求的 Content-Type 应该是 application/json 吧? 这样的话就不能使用 Bind,而需要接受raw格式的数据流方法,可以用用到 ioutil.ReadAll 去获取数据,获取到Json字符串之后,再去解析成对应的json结构。

参考代码:

func Person(c echo.Context) error {
    var user []RequestBody

    result, err := ioutil.ReadAll(c.Request().Body)
    if err != nil {
        fmt.Println("ioutil.ReadAll err:", err)
        return err
    }

    err = json.Unmarshal(result, &user)
    if err != nil {
        fmt.Println("json.Unmarshal err:", err)
        return err
    }

    fmt.Println("user:", user) // user:[{1 xiaoming 13} {2 xiaohong 19}]
    return nil
}

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Golang 的 echo 框架中,接收 Json 数

    Golang 的 echo 框架中,接收 Json 数

  • 新版chrome(版本 80.0.3987.149),接

    新版chrome(版本 80.0.3987.149),接

  • mac上安装zookeeper启动失败,但是没看

    mac上安装zookeeper启动失败,但是没看

  • Echarts柱状图实现X轴第二层能分组展示

    Echarts柱状图实现X轴第二层能分组展示

腾讯云代理商
海外云服务器