"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 JSON com pares de chave/valor conhecidos e desconhecidos em uma estrutura Go?

Como analisar JSON com pares de chave/valor conhecidos e desconhecidos em uma estrutura Go?

Publicado em 2024-11-07
Navegar:790

How to Parse JSON with Known and Unknown Key/Value Pairs into a Go Struct?

Desempacotar JSON com pares de chave/valor arbitrários para estruturar

Problema

Como posso analisar uma string JSON com pares de chave/valor conhecidos e desconhecidos em uma estrutura Go? Os campos desconhecidos podem ter qualquer nome e tipo de valor (string, bool, float64 ou int).

Solução

Crie uma estrutura com os campos conhecidos e uma fatia de mapas para os campos desconhecidos :

type Message struct {
    Known1   string `json:"known1"`
    Known2   string `json:"known2"`
    Unknowns []map[string]interface{}
}

Desempacote a string JSON nesta estrutura:

json.Unmarshal([]byte(jsonMsg), &msg)

O campo Desconhecidos conterá uma lista de mapas que representam os pares chave/valor desconhecidos.

Alternativas

  1. Double Unmarshal:

    • Primeiro, desmarque em uma estrutura temporária contendo apenas os campos conhecidos.
    • Em seguida, desempacote novamente em uma interface de mapa[string]{} e extraia os valores desconhecidos manualmente.
  2. Unmarshal e conversão de tipo:

    • Unmarshal em uma interface de mapa[string]{}.
    • Itere sobre o mapa e digite os valores para os tipos apropriados .

Considerações

Todas as três soluções são válidas, mas a mais simples e elegante é a abordagem inicial baseada em estrutura. Isso evita a necessidade de desempacotamentos adicionais ou conversões manuais de tipo.

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