"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment désérialiser des structures JSON imbriquées dynamiques dans Go ?

Comment désérialiser des structures JSON imbriquées dynamiques dans Go ?

Publié le 2024-11-18
Parcourir:684

How to Deserialize Dynamic Nested JSON Structures in Go?

Décodage des structures JSON dynamiques imbriquées dans Go

En Go, la désérialisation des données JSON avec des structures dynamiques imbriquées peut s'avérer difficile. Une requête récente illustre ce problème :

{
    "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
}

Pour désérialiser ces données, nous devons utiliser une carte pour modéliser la liste dynamique des statuts SMS. Voici le code modifié :

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"`
}

Maintenant, désorganisez les données JSON avec cette structure modifiée :

var result SMSSendJSON

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

Désérialisera correctement les structures dynamiques imbriquées, ce qui donnera :

{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}

Les clés du résultat. La carte SMS correspond aux numéros de téléphone dynamiques, et leurs valeurs sont les statuts SMS respectifs.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3