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

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

Susan Sarandon
Libérer: 2024-11-22 21:24:15
original
969 Les gens l'ont consulté

How to Deserialize JSON with Dynamic Names in Nested Structures in Go?

Décodage des structures dynamiques imbriquées en JSON avec Go

Cet article aborde le défi de la désérialisation des données JSON qui comportent des noms dynamiques dans des structures imbriquées. Examinons le problème et proposons une solution.

Énoncé du problème

Considérez la réponse JSON suivante :

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

struct :

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        []SMSPhone `json:"sms"`
    Balance    float64    `json:"balance"`
}
Copier après la connexion

Le problème se pose en raison des numéros de téléphone dynamiques comme noms de propriété dans le "sms" objet.

Solution

Pour gérer cette situation, nous pouvons utiliser une carte pour représenter l'objet "sms" en JSON :

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, le code de désérialisation ressemble à ceci :

var result SMSSendJSON

if err := json.Unmarshal([]byte(src), &result); err != nil {
    panic(err)
}
Copier après la connexion

Cette approche nous permet de traiter correctement les structures dynamiques imbriquées dans Allez-y.

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