go - 在 POST 请求中传递对象数组时出现“JSON 输入意外结束”
问题描述
import "github.com/gin-gonic/gin"
func Receive(c *gin.Context) {
// Gets JSON ecnoded data
rawData, err := c.GetRawData()
if err != nil {
return nil, err
}
logger.Info("Raw data received - ", rawData)
}
{"key":"value"}
当我传递一个 Json 对象但给出错误时,此代码片段有效:
“JSON 输入意外结束”
当我传递一个像输入一样的数组时[{"key":"val"},{"key": "val"}]
。
解决方案
GetRawData() 所做的只是返回流数据,因此不会导致您的错误:
// GetRawData return stream data.
func (c *Context) GetRawData() ([]byte, error) {
return ioutil.ReadAll(c.Request.Body)
}
但是,请尝试使用BindJSON
并反序列化为结构。例如看这个问题。
type List struct {
Messages []string `key:"required"`
}
func Receive(c *gin.Context) {
data := new(List)
err := c.BindJSON(data)
if err != nil {
return nil, err
}
}
推荐阅读
- python - Spotify 和 Youtube API 集成:喜欢 Spotify 中的 Youtube 音乐视频
- assembly - perf 如何收集内核空间性能事件?
- javascript - 如何使用云功能 JavaScript firebase 删除文件?
- javascript - 每次执行函数时如何将数组另存为新对象而不覆盖我的旧数组
- linux - IIS 和 NGINX 可以扫描自定义标头并根据过滤器接受/拒绝请求吗?
- java - 如果我添加 @Size(min>2) 是否也使用 @NotNull 注释有意义?
- javascript - 当我无法获取 forEach 不是函数时,如何从 Promise 中获取数据?
- javascript - 如何在 CSS 和 HTML 中将动画分层放在另一个动画后面?
- python - Pandas:如何在不同国家爆发不同日期的情况下标准化 COVID-19 数据框
- sql - 将参数字符串传递给存储过程