code: func (e *StrSlice) UnmarshalJSON(b []byte) error {
  	if len(b) == 0 {
  		// With no input, we preserve the existing value by returning nil and
  		// leaving the target alone. This allows defining default values for
  		// the type.
  		return nil
  	}
  
  	p := make([]string, 0, 1)
  	if err := json.Unmarshal(b, &p); err != nil {
  		var s string
  		if err := json.Unmarshal(b, &s); err != nil {
  			return err
  		}
  		p = append(p, s)
  	}
  
  	*e = p
  	return nil
  }
docs: // UnmarshalJSON decodes the byte slice whether it's a string or an array of
  // strings. This method is needed to implement json.Unmarshaler.