Skip to content

Custom errors JSON output with Factory

It is possible to use the MarshalJsonFunc parameter of Factory for customizing the JSON output for errors.

customMarshalJson := func(e *Error) ([]byte, error) {
errors := map[string]interface{}{}
for k, v := range e.errors {
errors[k] = v.Messages()
}
// Add a root key level called errors, which is not set by default in the Valgo implementation.
return json.Marshal(map[string]map[string]interface{}{"errors": errors})
}
// Set the custom Marshal JSON function
factory := v.Factory(v.FactoryOptions{
MarshalJsonFunc: customMarshalJson
})
// Now validate something to check if the output JSON contains the errors root key
val := factory.Is(v.String("", "name").Not().Empty())
out, _ := json.MarshalIndent(val.Error(), "", " ")
fmt.Println(string(out))

output:

{
"errors": {
"name": [
"Name can't be empty"
]
}
}