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
Barbara Streisandoriginal
2024-11-15 13:38:021020parcourir

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
}

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

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)

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 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!

Déclaration:
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