Вы можете реализовать json.Marshaler
для obj
или для определенного поля внутри obj
. Этот маршалер может проверить значение поля и вернуть ошибку. Вот пример с пользовательским маршалером, добавленным для поля Name
, которое завершается ошибкой, если Name
равно "Boom!"
type NameWithValidation string
func (s NameWithValidation) MarshalJSON() ([]byte, error) {
if string(s) == "Boom!" {
return nil, fmt.Errorf("Name '%s' failed validation", s)
}
return json.Marshal(string(s))
}
type obj struct {
Name NameWithValidation `json:"name"`
}
При маршалинге json.Marshal()
проверяет, реализует ли тип json.Marshaler
и, если это так, он вызывает MarshalJSON()
вместо того, чтобы пытаться маршалировать сам элемент.