"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 analisar formatos de hora não padrão de JSON em Golang?

Como analisar formatos de hora não padrão de JSON em Golang?

Publicado em 2024-11-09
Navegar:625

How to Parse Non-Standard Time Formats from JSON in Golang?

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 atualizadas
type 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 adicionais

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

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