"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como personalizar o layout JSON para campos time.Time em Golang?

Como personalizar o layout JSON para campos time.Time em Golang?

Publicado em 2024-11-20
Navegar:296

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

Personalizando o layout JSON para time.Time em Golang

Em Golang, a função encoding/json.Marshal é comumente usada para converter objetos em JSON. No entanto, nas configurações padrão, ele pode não estar alinhado com o layout JSON desejado. Este artigo ilustra uma solução para substituir o layout padrão e personalizar o formato usado pelos campos time.Time durante o empacotamento JSON.

Vamos supor que você tenha um struct s com um campo time.Time chamado starttime. Ao empacotar esta estrutura para JSON, você deseja usar um layout personalizado específico.

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

Para conseguir isso, podemos criar um tipo personalizado que incorpora time.Time e substitui os métodos MarshalText e 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
}

Ao substituir MarshalText, controlamos como o tipo jsonTime converte seu valor em um formato de texto, permitindo-nos especificar o layout personalizado. Além disso, ao substituir MarshalJSON, garantimos que o método substituído seja usado em vez da implementação interna time.Time para empacotamento JSON.

Com o tipo jsonTime personalizado, agora você pode empacotar sua estrutura usando o layout desejado :

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

Isso produzirá uma string JSON com o campo starttime formatado de acordo com o layout time.Kitchen.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3