Maison > développement back-end > Golang > Comment désérialiser les structures JSON imbriquées dynamiques dans Go ?

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

Barbara Streisand
Libérer: 2024-11-15 13:38:02
original
1008 Les gens l'ont consulté

How to Deserialize Dynamic Nested JSON Structures in Go?

Décoder les structures JSON dynamiques imbriquées dans Go

Dans Go, désérialiser des données JSON avec des structures dynamiques imbriquées peut s'avérer difficile. Une requête récente illustre cette problématique :

{
    "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
}
Copier après la connexion

Pour désérialiser de telles 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"`
}
Copier après la connexion

Maintenant, démarshaler 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)
Copier après la connexion

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}
Copier après la connexion

Les clés de la carte result.Sms correspondent aux numéros de téléphone dynamiques, et leurs valeurs sont les SMS respectifs statuts.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal