Golang JSON参数验证

在Golang中处理JSON数据时,如何对传入的参数进行有效性验证?比如要求某些字段必须存在、必须是特定类型或符合特定格式。除了手动解析检查外,有没有推荐的标准库或第三方包可以实现类似功能?特别是针对复杂嵌套结构的JSON数据,如何高效地实现参数验证并返回清晰的错误信息?

2 回复

推荐使用 go-playground/validator 库,结合结构体标签进行JSON参数验证。示例:

type User struct {
    Name  string `json:"name" validate:"required,min=2"`
    Email string `json:"email" validate:"required,email"`
}

可验证必填、格式、长度等规则,简洁高效。

更多关于Golang JSON参数验证的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中进行JSON参数验证,推荐使用go-playground/validator库,它可以与JSON解析库(如encoding/json)结合使用。以下是实现步骤:

  1. 安装依赖

    go get github.com/go-playground/validator/v10
    
  2. 定义结构体并添加标签: 在结构体字段中使用validate标签指定验证规则:

    type User struct {
        Name  string `json:"name" validate:"required,min=2,max=50"`
        Email string `json:"email" validate:"required,email"`
        Age   int    `json:"age" validate:"gte=0,lte=130"`
    }
    
  3. 实现验证逻辑

    import (
        "encoding/json"
        "github.com/go-playground/validator/v10"
    )
    
    var validate = validator.New()
    
    func ValidateUser(data []byte) error {
        var user User
        if err := json.Unmarshal(data, &user); err != nil {
            return err
        }
        return validate.Struct(user)
    }
    
  4. 处理验证错误

    if err := ValidateUser(jsonData); err != nil {
        if validationErrors, ok := err.(validator.ValidationErrors); ok {
            for _, fieldErr := range validationErrors {
                fmt.Printf("字段 %s 验证失败: %s\n", fieldErr.Field(), fieldErr.Tag())
            }
        }
    }
    

常用验证标签

  • required:必填字段
  • email:邮箱格式
  • min=长度/max=长度:字符串/数组最小/最大长度
  • gte=值/lte=值:数字大于等于/小于等于
  • oneof=选项1 选项2:枚举值验证

自定义验证

validate.RegisterValidation("customRule", func(fl validator.FieldLevel) bool {
    return fl.Field().String() == "allowed"
})
// 使用:`validate:"customRule"`

这种方法能有效验证JSON参数,确保数据符合业务规则。

回到顶部