Maison > développement back-end > Golang > Comment puis-je désorganiser un tableau JSON avec des types de données mixtes dans Go ?

Comment puis-je désorganiser un tableau JSON avec des types de données mixtes dans Go ?

Barbara Streisand
Libérer: 2024-12-14 05:00:09
original
351 Les gens l'ont consulté

How Can I Unmarshal a JSON Array with Mixed Data Types in Go?

Désorganisation d'un tableau de types divers

Dans la gestion JSON, la désorganisation de tableaux avec des types d'éléments variés peut être difficile. Cet article aborde le problème de la désorganisation des tableaux composés d'éléments avec des types de données connus mais non triés.

Méthode de Go pour le décodage arbitraire des données

Comme indiqué dans la documentation officielle de Go sur JSON encodage, il est possible de décoder des données arbitraires dans une interface{} à l'aide de la fonction json.Unmarshal. En utilisant l'assertion de type, le type de données peut être déterminé dynamiquement.

Adaptation de votre code

La version modifiée suivante de votre code présente cette approche :

package main

import (
    "encoding/json"
    "fmt"
)

var my_json string = `{
    "an_array":[
    "with_a string",
    {
        "and":"some_more",
        "different":["nested", "types"]
    }
    ]
}`

func IdentifyDataTypes(f interface{}) {
    switch vf := f.(type) {
    case map[string]interface{}:
        fmt.Println("is a map:")
        for k, v := range vf {
            switch vv := v.(type) {
            case string:
                fmt.Printf("%v: is string - %q\n", k, vv)
            case int:
                fmt.Printf("%v: is int - %q\n", k, vv)
            default:
                fmt.Printf("%v: ", k)
                IdentifyDataTypes(v)
            }

        }
    case []interface{}:
        fmt.Println("is an array:")
        for k, v := range vf {
            switch vv := v.(type) {
            case string:
                fmt.Printf("%v: is string - %q\n", k, vv)
            case int:
                fmt.Printf("%v: is int - %q\n", k, vv)
            default:
                fmt.Printf("%v: ", k)
                IdentifyDataTypes(v)
            }

        }
    }
}

func main() {

    fmt.Println("JSON:\n", my_json, "\n")

    var f interface{}
    err := json.Unmarshal([]byte(my_json), &f)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Printf("JSON: ")
        IdentifyDataTypes(f)
    }
}
Copier après la connexion

Sortie

Le code produit ce qui suit sortie :

JSON:
 {
    "an_array":[
    "with_a string",
    {
        "and":"some_more",
        "different":["nested", "types"]
    }
    ]
}

JSON: is a map:
an_array: is an array:
0: is string - "with_a string"
1: is a map:
and: is string - "some_more"
different: is an array:
0: is string - "nested"
1: is string - "types"
Copier après la connexion

Cette approche permet une identification et une gestion dynamiques des types d'éléments au sein du tableau, offrant une solution polyvalente pour vos besoins de désorganisation.

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