Un/Marshaling personalizado para formatos de hora JSON não padrão
Ao lidar com dados JSON que contêm valores de hora em formatos não padrão, o decodificador JSON integrado pode encontrar erros. Para lidar com essas situações, funções personalizadas de empacotamento e desempacotamento podem ser implementadas.
Considere o seguinte JSON:
{ "name": "John", "birth_date": "1996-10-07" }
E a estrutura Go desejada:
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
O uso do decodificador JSON padrão resultaria em um erro ao analisar o campo "data_de_nascimento". Para personalizar esse comportamento, um alias de tipo pode ser criado e adicionado à estrutura:
type JsonBirthDate time.Time
Em seguida, as funções personalizadas de empacotamento e desempacotamento são implementadas:
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)) }
Com essas funções personalizadas, o JSON agora pode ser decodificado na estrutura Go conforme pretendido:
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"))
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