Maison  >  Article  >  développement back-end  >  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
Linda Hamiltonoriginal
2024-10-29 02:58:02365parcourir

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>

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>

Sortie :

Success, message: Message
Error, code: [ERROR_CODE]

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!

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