Analizando el formato de hora no estándar desde JSON
Al decodificar datos JSON en una estructura personalizada, pueden surgir inconsistencias en los formatos de fecha. Para solucionar este problema, Golang ofrece la opción de implementar funciones de clasificación y desclasificación personalizadas.
Funciones de clasificación y desclasificación personalizadas
Para especificar un formato de análisis personalizado, se utiliza un alias de tipo creado para el campo de hora, y las interfaces Marshaler y Unmarshaler se implementan de la siguiente manera:
type JsonBirthDate time.Time // UnmarshalJSON translates a JSON string to a time value. func (j *JsonBirthDate) UnmarshalJSON(b []byte) error { s := strings.Trim(string(b), `"`) t, err := time.Parse("2006-01-02", s) if err != nil { return err } *j = JsonBirthDate(t) return nil } // MarshalJSON converts a time value to a JSON string. func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
Esta lógica personalizada verifica si el valor JSON está en el formato deseado y lo analiza en consecuencia.
Estructura y análisis actualizados
La estructura es actualizado para usar el tipo personalizado y la decodificación puede continuar como de costumbre:
type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` } decoder := json.NewDecoder(req.Body) if err := decoder.Decode(&person); err != nil { log.Println(err) }
Funciones adicionales
Para mayor comodidad, se puede agregar un método de formato para proporcionar una representación formateada de la fecha:
// Format prints the date using the specified format string. func (j JsonBirthDate) Format(s string) string { t := time.Time(j) return t.Format(s) }
Este enfoque personalizado de clasificación y desclasificación permite un análisis flexible de valores de tiempo desde JSON incluso cuando se desvían de los formatos estándar.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3