"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 el diseño JSON para los campos time.Time en Golang?

¿Cómo personalizar el diseño JSON para los campos time.Time en Golang?

Publicado el 2024-11-20
Navegar:362

How to Customize the JSON Layout for time.Time Fields in Golang?

Personalizar el diseño JSON para time.Time en Golang

En Golang, la función encoding/json.Marshal se usa comúnmente para convertir objetos a JSON. Sin embargo, bajo la configuración predeterminada, es posible que no se alinee con el diseño JSON deseado. Este artículo ilustra una solución para anular el diseño predeterminado y personalizar el formato utilizado por los campos time.Time durante la clasificación JSON.

Supongamos que tiene una estructura s con un campo time.Time llamado starttime. Al configurar esta estructura en JSON, desea utilizar un diseño personalizado específico.

s := {"starttime":time.Now(), "name":"ali"}

Para lograr esto, podemos crear un tipo personalizado que incorpore time.Time y anule los métodos MarshalText y MarshalJSON.

import "fmt"
import "time"
import "encoding/json"

type jsonTime struct {
    time.Time
    f string
}

func (j jsonTime) format() string {
    return j.Time.Format(j.f)
}

func (j jsonTime) MarshalText() ([]byte, error) {
    return []byte(j.format()), nil
}

func (j jsonTime) MarshalJSON() ([]byte, error) {
    return []byte(`"`   j.format()   `"`), nil
}

Al anular MarshalText, controlamos cómo el tipo jsonTime convierte su valor a un formato de texto, lo que nos permite especificar el diseño personalizado. Además, al anular MarshalJSON, nos aseguramos de que se utilice el método anulado en lugar del tiempo incorporado. Implementación de tiempo para la clasificación JSON.

Con el tipo jsonTime personalizado, ahora puede ordenar su estructura s usando el diseño deseado :

jt := jsonTime{time.Now(), time.Kitchen}
x := map[string]interface{}{
    "foo": jt,
    "bar": "baz",
}
data, err := json.Marshal(x)
if err != nil {
    panic(err)
}

Esto producirá una cadena JSON con el campo de hora de inicio formateado según la hora. Diseño de la cocina.

Ú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