"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 posso implementar desempacotamento JSON personalizado para tipos escalares derivados no Go?

Como posso implementar desempacotamento JSON personalizado para tipos escalares derivados no Go?

Publicado em 19/11/2024
Navegar:440

How Can I Implement Custom JSON Unmarshaling for Derived Scalar Types in Go?

Derivar tipos personalizados para JSON Unmarshaling em Go

Ao trabalhar com tipos personalizados em Go, muitas vezes é necessário implementar a função UnmarshalJSON para ativar conversão automática de JSON para o tipo desejado. No entanto, surgem desafios quando o tipo é derivado de um valor escalar. Este artigo explora uma solução para superar esse problema.

Considere o exemplo de um tipo PersonID que representa constantes inteiras subtipadas para identificar indivíduos. Queremos estender a funcionalidade desse tipo para oferecer suporte à conversão automática de strings JSON. A implementação do UnmarshalJSON para este tipo torna-se difícil, pois se destina a retornar ou modificar um valor escalar diretamente, enquanto o UnmarshalJSON espera uma estrutura para sua modificação.

Para resolver isso, adotamos uma abordagem de receptor de ponteiro. Ao usar um receptor de ponteiro, as alterações feitas no método UnmarshalJSON são refletidas no valor original. Aqui está um exemplo da implementação modificada do UnmarshalJSON:

func (intValue *PersonID) UnmarshalJSON(data []byte) error {
  var s string
  if err := json.Unmarshal(data, &s); err != nil {
    return err
  }
  *intValue = Lookup(s)
  return nil
}

Nesta implementação, o texto JSON é desempacotado em uma variável de string antes de ser passado para a função Lookup, que converte a string no valor PersonID desejado. Esse valor é então atribuído ao ponteiro intValue.

Além disso, para evitar conflitos entre as tags JSON e os dados JSON, certifique-se de que as tags na estrutura MyType correspondam aos nomes dos campos no JSON. Seguindo essas etapas, você pode implementar UnmarshalJSON com êxito para tipos escalares derivados.

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