"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo personalizar formatos de hora JSON no estándar en Go?

¿Cómo personalizar formatos de hora JSON no estándar en Go?

Publicado el 2024-12-23
Navegar:185

How to Custom Unmarshal Non-Standard JSON Time Formats in Go?

Desmontaje/clasificación personalizada para formatos de hora JSON no estándar

Cuando se trata de datos JSON que contienen valores de hora en formatos no estándar, el decodificador JSON incorporado puede encontrar errores. Para manejar tales situaciones, se pueden implementar funciones personalizadas de clasificación y desclasificación.

Considere el siguiente JSON:

{
    "name": "John",
    "birth_date": "1996-10-07"
}

Y la estructura Go deseada:

type Person struct {
    Name string `json:"name"`
    BirthDate time.Time `json:"birth_date"`
}

El uso del descodificador JSON estándar provocaría un error al analizar el campo "fecha_nacimiento". Para personalizar este comportamiento, se puede crear un alias de tipo y agregarlo a la estructura:

type JsonBirthDate time.Time

Luego, se implementan funciones personalizadas de clasificación y desclasificación:

func (j *JsonBirthDate) UnmarshalJSON(b []byte) error {
    s := strings.Trim(string(b), `"`) // Remove quotes
    t, err := time.Parse("2006-01-02", s)
    if err != nil {
        return err
    }
    *j = JsonBirthDate(t)
    return nil
}

func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

Con estas funciones personalizadas, el JSON ahora se puede decodificar en la estructura Go según lo previsto:

person := Person{}

decoder := json.NewDecoder(req.Body);

if err := decoder.Decode(&person); err != nil {
    log.Println(err)
}

// Print the birth date using the Format function
fmt.Println(person.BirthDate.Format("2006-01-02"))
Último tutorial Más>

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