Maison >développement back-end >Golang >Comment gérer les retours de tableaux variables lors de la désorganisation de JSON dans Go ?

Comment gérer les retours de tableaux variables lors de la désorganisation de JSON dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-12 12:49:10251parcourir

How to Handle Variable Array Returns When Unmarshalling JSON in Go?

Désorganisation de JSON avec retour de tableau variable

Lors de la récupération de JSON à partir de sources externes, la structure de la réponse peut varier, ce qui rend difficile la désorganisation dans une structure Go fixe. Cela est particulièrement évident lorsque le JSON peut contenir un tableau ou un seul objet pour la même propriété.

Dans l'exemple fourni, la réponse JSON contient une propriété appelée "gwrcmd" qui peut être soit un tableau d'objets, soit un objet singulier. Pour résoudre ce problème, une approche consiste à créer une deuxième structure avec les mêmes champs que l'original mais avec une tranche pour la propriété "gwrcmd". Cependant, une solution plus flexible peut être obtenue en utilisant json.RawMessage.

json.RawMessage permet de désorganiser les types inconnus dans une chaîne JSON brute. Cette fonctionnalité peut être utilisée pour jeter un coup d'œil dans le JSON et déterminer la manière appropriée de le désorganiser dans le type Go correspondant.

Considérez l'exemple simplifié suivant :

type Response struct {
    RawAWrapper struct {
        RawA json.RawMessage `json:"a"`
    }
    A  A   `json:"-"`
    As []A `json:"-"`
}

type A struct {
    B string
}

func (r *Response) UnmarshalJSON(b []byte) error {
    if err := json.Unmarshal(b, &r.RawAWrapper); err != nil {
        return err
    }
    if r.RawAWrapper.RawA[0] == '[' {
        return json.Unmarshal(r.RawAWrapper.RawA, &r.As)
    }
    return json.Unmarshal(r.RawAWrapper.RawA, &r.A)
}

Dans cet exemple, le Le champ json.RawMessage RawA capture la valeur JSON de la propriété « a ». Sur la base du premier octet du JSON brut, nous pouvons déterminer si la valeur est un tableau ([]) ou un objet ("{"). Ces informations sont ensuite utilisées pour décomposer la valeur dans la structure A (pour les objets) ou dans la tranche As (pour les tableaux).

Cette approche offre un moyen plus flexible et plus robuste de gérer les réponses JSON avec des structures variables. Il élimine le besoin de structures en double et permet une désorganisation dynamique basée sur le contenu JSON.

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