Analisando formato de hora não padrão de JSON
Ao decodificar dados JSON em uma estrutura personalizada, podem surgir inconsistências nos formatos de data. Para resolver isso, Golang oferece a opção de implementar funções personalizadas de empacotamento e desempacotamento. criado para o campo de hora, e as interfaces Marshaler e Unmarshaler são implementadas da seguinte forma:
type JsonBirthDate time.Time // UnmarshalJSON traduz uma string JSON em um valor de tempo. func (j *JsonBirthDate) UnmarshalJSON(b []byte) erro { s := strings.Trim(string(b), `"`) t, err := tempo.Parse("2006-01-02", s) se errar! = nulo { retornar errar } *j = JsonDataNascimento(t) retorno nulo } // MarshalJSON converte um valor de tempo em uma string JSON. func (j JsonBirthDate) MarshalJSON() ([]byte, erro) { retornar json.Marshal(time.Time(j)) }Essa lógica personalizada verifica se o valor JSON está no formato desejado e o analisa adequadamente.
Estrutura e análise atualizadastype JsonBirthDate time.Time // UnmarshalJSON translates a JSON string to a time value. func (j *JsonBirthDate) UnmarshalJSON(b []byte) error { s := strings.Trim(string(b), `"`) t, err := time.Parse("2006-01-02", s) if err != nil { return err } *j = JsonBirthDate(t) return nil } // MarshalJSON converts a time value to a JSON string. func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
A estrutura é atualizado para usar o tipo personalizado e a decodificação pode prosseguir normalmente:
type Person struct { String de nome `json:"nome"` DataDeNascimento JsonDataDeNascimento `json:"data_nascimento"` } decodificador: = json.NewDecoder (req.Body) se errar := decoder.Decode(&person); err! = nulo { log.Println(erro) }
Recursos adicionaistype Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` } decoder := json.NewDecoder(req.Body) if err := decoder.Decode(&person); err != nil { log.Println(err) }
// Format imprime o data usando a string de formato especificada. func (j JsonBirthDate) Formato(s string) string { t := tempo.Tempo(j) retornar t.Format(s) }Essa abordagem personalizada de empacotamento e desempacotamento permite a análise flexível de valores de tempo do JSON, mesmo quando eles se desviam dos formatos padrão.
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