如何通过 Golang 跳过空数组的 json 验证

ica*_*tan 4 validation json go

我想跳过对特定字段的 json 文件中的空数组的验证。下面您可以看到 Book 结构定义,如果 json 文件中没有声明作者,则可以验证该定义。另一方面,如果为作者定义了空数组,则会失败。是否可以使用现有标签实现此行为,或者我是否必须定义自定义验证器?

type Book struct {
    Title      string `json:"title" validate:"min=2"`
    Authors    `json:"authors" validate:"omitempty,min=1,dive,min=3"`
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我通过“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
    }
Run Code Online (Sandbox Code Playgroud)

作品:

{
    "title": "A Book"
}
Run Code Online (Sandbox Code Playgroud)

失败并显示“密钥:‘Book.Authors’错误:‘Min’标签上‘Authors’的字段验证失败”

{
    "title": "A Book",
    "authors": []

}

Run Code Online (Sandbox Code Playgroud)

小智 6

这是因为您的作者验证字符串是"omitempty,min=1,dive,min=3". 空切片的长度为0,即<1。

如果你用相反的方式替换验证字符串"omitempty,min=0,dive,min=3",它就会通过。