Golang Go语言中请教一个 gin 绑定 json 时忽略为空字段的问题

发布于 1周前 作者 wuwangju 来自 Go语言

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

7 回复

更多关于Golang Go语言中请教一个 gin 绑定 json 时忽略为空字段的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


字段用指针,判断指针是不是 nil

`json:“maxBandwidthOut,omitempty”



非常感谢~

这个试过了也不起作用( sad.jpg

如果用 gorm 的话入库可以忽略空值

在 Go 语言中使用 Gin 框架时,如果你希望在绑定 JSON 数据时忽略为空(零值)的字段,可以通过自定义绑定逻辑或者使用结构体标签来实现。以下是两种常见的方法:

  1. 使用结构体标签: Gin 框架本身并不直接提供忽略空字段的功能,但你可以通过 JSON 结构体标签 omitempty 来控制序列化时是否忽略空字段。注意,这仅在将数据序列化为 JSON 时有效,对于反序列化(即绑定 JSON 到结构体)则不适用。如果你需要在绑定时忽略空字段,需要采取其他方法。

  2. 自定义绑定逻辑: 你可以创建一个自定义的绑定器,在绑定 JSON 数据到结构体之前,先对数据进行预处理,移除空字段。这通常涉及到解析原始的 JSON 数据到一个 map[string]interface{},然后遍历这个 map,过滤掉值为零值的字段,再将过滤后的数据编码回 JSON 字符串,最后使用 Gin 的默认绑定逻辑将其绑定到目标结构体。

示例代码实现自定义绑定逻辑可能较为复杂,且容易出错,因此建议参考 Gin 社区或相关开源项目中的实现,或者考虑使用其他中间件或库来处理这一需求。

总之,虽然 Gin 框架本身不提供直接忽略空字段的绑定功能,但你可以通过自定义逻辑或使用结构体标签(仅适用于序列化)来满足这一需求。在选择实现方式时,请根据你的具体需求和项目的复杂度来决定。

回到顶部