如何通过 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",它将通过。