4 回答
TA贡献1811条经验 获得超6个赞
我们出于类似目的使用了go-playground/validator.v8 。您可以使用开箱即用的标签定义数据验证(基本内容,例如相等性、最小值/最大值,甚至还有一些表达式语言)。最重要的是,您可以添加自定义验证。文档里都有,希望对你有帮助。
TA贡献1836条经验 获得超13个赞
我今天必须这样做,所以我将分享我的解决方案。我使用 unmarshal 创建了一个函数,它根据文本是否返回有效的 json 返回 true 或 false:
// isJSON checks that the string value of the field can unmarshall into valid json
func isJSON(s string) bool {
var j map[string]interface{}
if err := json.Unmarshal([]byte(s), &j); err != nil {
return false
}
return true
}
然后我将该逻辑与验证程序包一起使用来创建和注册一个自定义验证标记,我可以在任何结构中使用它来验证字段是否包含 json。您可以使用go playground检查完整的解决方案和实验:
// isJSON checks that the string value of the field can unmarshall into valid json
func isJSON(fl validator.FieldLevel) bool {
var j map[string]interface{}
if err := json.Unmarshal([]byte(fl.Field().String()), &j); err != nil {
return false
}
return true
}
// register the function with json tag:
validate.RegisterValidation("json", isJSON)
TA贡献1900条经验 获得超5个赞
有一种方法checkValid
(在encoding/json
包中)可以做到这一点。但是,此方法未公开。因此,您可以使用Unmarshal
(在同一个包中)来检查是否JSON
有效。
- 4 回答
- 0 关注
- 157 浏览
添加回答
举报