"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo descomponer JSON anidado en una matriz de objetos en Go?

¿Cómo descomponer JSON anidado en una matriz de objetos en Go?

Publicado el 2024-12-21
Navegar:332

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

Desclasificación de JSON anidado en una matriz de objetos en Go

Problema

Considere los siguientes datos 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
   }
}

El objetivo es descomponer este JSON en una serie de objetos Monster.

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

Solución

Para lograr esto, siga estos pasos:

  1. Defina MonsterCollection: Cree un tipo MonsterCollection para contener un mapa de Monster objetos con claves de cadena.
type MonsterCollection struct {
    Pool map[string]Monster
}
  1. Implementar el método FromJson: Defina un método FromJson en el tipo MonsterCollection para manejar la desclasificación.
func (mc *MonsterCollection) FromJson(jsonStr string) error {
    var data *map[string]Monster
    b := []byte(jsonStr)
    return json.Unmarshal(b, &data)
}
  • Usar datos var *map[string]Monster evita el uso de la interfaz{}, lo que garantiza que el mapa resultante tenga el tipo deseado.
  • Pasar datos como puntero garantiza que los cambios realizados durante la desclasificación se reflejan en el campo Pool de MonsterCollection.
  1. Escriba la clave correcta Pool: Cambie el tipo de clave del mapa Pool a cadena para que coincida con las claves en los datos JSON.
  2. Usar etiquetas de estructura: Agregue etiquetas de estructura JSON a la estructura Monster para especificar los nombres de los campos en los datos JSON.
type Monster struct {
    MonsterId  int32 `json:"monster-id"`
    Level      int32 `json:"level"`
    SkillLevel int32 `json:"skill-level"`
    AimerId    int32 `json:"aimer-id"`
}
  1. Llamar a FromJson: Llame al método FromJson con la cadena JSON para descomponer los datos en MonsterCollection.
mc := new(MonsterCollection)
err := mc.FromJson(jsonStr)
  1. Verificar errores: Manejar cualquier error devuelto por FromJson con fines de depuración.
  2. Acceder a los objetos : Utilice el campo Pool de MonsterCollection para acceder a los objetos Monster individuales.
for id, monster := range mc.Pool {
    fmt.Println(id, monster)
}

Si sigue estos pasos, podrá descomponer con éxito los datos JSON anidados en una matriz de objetos Monster en Go.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3