Golang Go语言中请教一个 gin 绑定 json 时忽略为空字段的问题
Golang Go语言中请教一个 gin 绑定 json 时忽略为空字段的问题
以下字段 name, description, maxBandwidthIn 和 maxBandwidthOut 都不是必选的,我希望前端没有传过来的字段在结构体中也可以被忽略。以下是我写的有问题的代码,不知道各位大佬平时都是怎么处理这样的需求呢🤔还望大家多多指教(((蟹蟹~
type UpdateModel struct {
Name string `json:"name" binding:"omitempty"`
Description string `json:"description" binding:"omitempty"`
MaxBandwidthIn int `json:"maxBandwidthIn" binding:"omitempty"`
MaxBandwidthOut int `json:"maxBandwidthOut" binding:"omitempty"`
}
func UpdateItem(context *gin.Context) {
var req UpdateModel // 初始化结构体,所有字段赋默认值,binding:"omitempty"不起作用
if err = context.BindJSON(&req); err != nil {
context.JSON( http.StatusBadRequest, err.Error())
return
}
...
}
更多关于Golang Go语言中请教一个 gin 绑定 json 时忽略为空字段的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang Go语言中请教一个 gin 绑定 json 时忽略为空字段的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
字段用指针,判断指针是不是 nil
`json:“maxBandwidthOut,omitempty”
非常感谢~
这个试过了也不起作用( sad.jpg
如果用 gorm 的话入库可以忽略空值
在 Go 语言中使用 Gin 框架时,如果你希望在绑定 JSON 数据时忽略为空(零值)的字段,可以通过自定义绑定逻辑或者使用结构体标签来实现。以下是两种常见的方法:
-
使用结构体标签: Gin 框架本身并不直接提供忽略空字段的功能,但你可以通过 JSON 结构体标签
omitempty
来控制序列化时是否忽略空字段。注意,这仅在将数据序列化为 JSON 时有效,对于反序列化(即绑定 JSON 到结构体)则不适用。如果你需要在绑定时忽略空字段,需要采取其他方法。 -
自定义绑定逻辑: 你可以创建一个自定义的绑定器,在绑定 JSON 数据到结构体之前,先对数据进行预处理,移除空字段。这通常涉及到解析原始的 JSON 数据到一个
map[string]interface{}
,然后遍历这个 map,过滤掉值为零值的字段,再将过滤后的数据编码回 JSON 字符串,最后使用 Gin 的默认绑定逻辑将其绑定到目标结构体。
示例代码实现自定义绑定逻辑可能较为复杂,且容易出错,因此建议参考 Gin 社区或相关开源项目中的实现,或者考虑使用其他中间件或库来处理这一需求。
总之,虽然 Gin 框架本身不提供直接忽略空字段的绑定功能,但你可以通过自定义逻辑或使用结构体标签(仅适用于序列化)来满足这一需求。在选择实现方式时,请根据你的具体需求和项目的复杂度来决定。