如何通过 Golang 跳过空数组的 json 验证
how to skip json validation for an empty array via Golang
我想跳过 json 文件中特定字段的空数组验证。您可以在下面看到 Book 结构定义,如果 json 文件中没有声明作者,则可以对其进行验证。另一方面,如果为作者定义了一个空数组,它就会失败。是否可以使用现有标签实现此行为,还是我必须定义自定义验证器?
type Book struct {
Title string `json:"title" validate:"min=2"`
Authors `json:"authors" validate:"omitempty,min=1,dive,min=3"`
// ...
}
我正在通过“github.com/go-playground/validator/v10”包的验证器验证 Book 结构:
book := &Book{}
if err := json.Unmarshal(data, book); err != nil {
return nil, err
}
v := validator.New()
if err := v.Struct(book); err != nil {
return nil, err
}
作品:
{
"title": "A Book"
}
失败,显示“密钥:'Book.Authors' Error:Field 'Authors' 的验证在 'min' 标签上失败”
{
"title": "A Book",
"authors": []
}
这是因为您的 Authors 验证字符串是 "omitempty,min=1,dive,min=3"
。空切片的长度为0,即<1.
如果您将验证字符串替换为 "omitempty,min=0,dive,min=3"
,它将通过。
我想跳过 json 文件中特定字段的空数组验证。您可以在下面看到 Book 结构定义,如果 json 文件中没有声明作者,则可以对其进行验证。另一方面,如果为作者定义了一个空数组,它就会失败。是否可以使用现有标签实现此行为,还是我必须定义自定义验证器?
type Book struct {
Title string `json:"title" validate:"min=2"`
Authors `json:"authors" validate:"omitempty,min=1,dive,min=3"`
// ...
}
我正在通过“github.com/go-playground/validator/v10”包的验证器验证 Book 结构:
book := &Book{}
if err := json.Unmarshal(data, book); err != nil {
return nil, err
}
v := validator.New()
if err := v.Struct(book); err != nil {
return nil, err
}
作品:
{
"title": "A Book"
}
失败,显示“密钥:'Book.Authors' Error:Field 'Authors' 的验证在 'min' 标签上失败”
{
"title": "A Book",
"authors": []
}
这是因为您的 Authors 验证字符串是 "omitempty,min=1,dive,min=3"
。空切片的长度为0,即<1.
如果您将验证字符串替换为 "omitempty,min=0,dive,min=3"
,它将通过。