"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 deserializar estructuras JSON anidadas dinámicas en Go?

¿Cómo deserializar estructuras JSON anidadas dinámicas en Go?

Publicado el 2024-11-18
Navegar:769

How to Deserialize Dynamic Nested JSON Structures in Go?

Decodificar estructuras JSON dinámicas anidadas en Go

En Go, deserializar datos JSON con estructuras dinámicas anidadas puede ser un desafío. Una consulta reciente ilustra este problema:

{
    "status": "OK",
    "status_code": 100,
    "sms": {
        "79607891234": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        },
        "79035671233": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        },
        "79105432212": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        }
    },
    "balance": 2676.18
}

Para deserializar dichos datos, necesitamos usar un mapa para modelar la lista dinámica de estados de SMS. Aquí está el código modificado:

type SMSPhone struct {
    Status     string `json:"status"`
    StatusCode int    `json:"status_code"`
    StatusText string `json:"status_text"`
}

type SMSSendJSON struct {
    Status     string              `json:"status"`
    StatusCode int                 `json:"status_code"`
    Sms        map[string]SMSPhone `json:"sms"`
    Balance    float64             `json:"balance"`
}

Ahora, desglosando los datos JSON con esta estructura modificada:

var result SMSSendJSON

if err := json.Unmarshal([]byte(src), &result); err != nil {
    panic(err)
}
fmt.Printf("% v", result)

Deserializará correctamente las estructuras anidadas dinámicas, lo que dará como resultado:

{Status:OK StatusCode:100 Sms:map[79035671233:{Status:ERROR StatusCode:203 StatusText:Нет текста сообщения} 79105432212:{Status:ERROR StatusCode:203 StatusText:Нет текста сообщения} 79607891234:{Status:ERROR StatusCode:203 StatusText:Нет текста сообщения}] Balance:2676.18}

Las claves en el resultado.Mapa de SMS corresponden a los números de teléfono dinámicos y sus valores son los respectivos estados de SMS.

Ú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