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.
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