"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 desempacotar JSON aninhado em uma matriz de objetos no Go?

Como desempacotar JSON aninhado em uma matriz de objetos no Go?

Publicado em 2024-12-21
Navegar:365

How to Unmarshal Nested JSON into an Array of Objects in Go?

Desempacotando JSON aninhado em matriz de objetos em Go

Problema

Considere os seguintes dados JSON:

{
   "1001":{
      "level":10,
      "monster-id":1001,
      "skill-level":1,
      "aimer-id":301
   },
   "1002":{
      "level":12,
      "monster-id":1002,
      "skill-level":1,
      "aimer-id":302
   },
   "1003":{
      "level":16,
      "monster-id":1003,
      "skill-level":2,
      "aimer-id":303
   }
}

O objetivo é desempacotar esse JSON em uma matriz de objetos Monster.

type Monster struct {
    MonsterId  int32
    Level      int32
    SkillLevel int32
    AimerId    int32
}

Solução

Para conseguir isso, siga estas etapas:

  1. Defina MonsterCollection: Crie um tipo MonsterCollection para conter um mapa de Monster objetos com chaves de string.
type MonsterCollection struct {
    Pool map[string]Monster
}
  1. Implementar método FromJson: Defina um método FromJson no tipo MonsterCollection para lidar com o desempacotamento.
func (mc *MonsterCollection) FromJson(jsonStr string) error {
    var data *map[string]Monster
    b := []byte(jsonStr)
    return json.Unmarshal(b, &data)
}
  • Usar var data *map[string]Monster evita o uso de interface{}, garantindo que o mapa resultante tenha o tipo desejado.
  • Passar dados como um ponteiro garante que as alterações feitas durante o desempacotamento são refletidas no campo Pool do MonsterCollection.
  1. Corrigir tipo de chave em Pool: Altere o tipo de chave do mapa Pool para string para corresponder às chaves nos dados JSON.
  2. Use tags de estrutura: Adicione tags de estrutura JSON à estrutura Monster para especificar os nomes dos campos nos dados JSON.
type Monster struct {
    MonsterId  int32 `json:"monster-id"`
    Level      int32 `json:"level"`
    SkillLevel int32 `json:"skill-level"`
    AimerId    int32 `json:"aimer-id"`
}
  1. Call FromJson: Chame o método FromJson com a string JSON para desempacotar os dados no MonsterCollection.
mc := new(MonsterCollection)
err := mc.FromJson(jsonStr)
  1. Verificar erros: Manipule quaisquer erros retornados por FromJson para fins de depuração.
  2. Acesse os objetos : Use o campo Pool do MonsterCollection para acessar os objetos Monster individuais.
for id, monster := range mc.Pool {
    fmt.Println(id, monster)
}

Seguindo essas etapas, você pode desempacotar com sucesso os dados JSON aninhados em uma matriz de objetos Monster em Go.

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