Maison > développement back-end > Golang > Comment désorganiser les données JSON avec des types de variables : chaîne ou tableau de chaînes ?

Comment désorganiser les données JSON avec des types de variables : chaîne ou tableau de chaînes ?

Linda Hamilton
Libérer: 2024-10-29 02:58:02
original
487 Les gens l'ont consulté

How to Unmarshal JSON Data with Variable Types: String or Array of Strings?

Décodage de JSON avec des structures de variantes

Le point de terminaison que vous consommez renvoie JSON dans différents formats, parfois sous forme de chaîne et d'autres fois sous forme de tableau. Pour gérer cette incohérence, la question suivante explore la meilleure approche pour concevoir une structure Go pouvant prendre en charge les deux types.

La question :

Comment puis-je créer une structure Go une structure qui peut désassembler les données JSON avec des types de variables, soit une chaîne, soit un tableau de chaînes ? Existe-t-il une solution élégante au-delà de la tentative de décodage en deux structures distinctes ?

La réponse :

Une approche plus sophistiquée consiste à décomposer le JSON en un type d'interface{}. Cette approche indépendante du type permet une gestion dynamique de différents types de valeur.

Pour implémenter cette technique, créez une structure avec un champ de type interface{}, comme démontré dans l'exemple suivant :

<code class="go">type Response struct {
    Message interface{} `json:"message"`
}</code>
Copier après la connexion

Lors de la désorganisation des données JSON dans cette structure, vous pouvez utiliser un commutateur de type ou une assertion de type pour déterminer le type réel du champ Message. Cela vous permet de traiter les données en conséquence.

Voici un exemple d'implémentation :

<code class="go">func main() {
    inputs := []string{
        `{"message":"Message"}`,
        `{"message":["ERROR_CODE"]}`,
    }

    for _, input := range inputs {
        var r Response
        if err := json.Unmarshal([]byte(input), &r); err != nil {
            panic(err)
        }
        switch x := r.Message.(type) {
        case string:
            fmt.Println("Success, message:", x)
        case []interface{}:
            fmt.Println("Error, code:", x)
        default:
            fmt.Println("Something else:", x)
        }
    }
}</code>
Copier après la connexion

Sortie :

Success, message: Message
Error, code: [ERROR_CODE]
Copier après la connexion

En utilisant l'approche interface{}, vous gagnez flexibilité dans la gestion des données JSON avec différents types, simplifiant ainsi votre base de code.

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