Maison >développement back-end >Golang >Comment analyser efficacement des structures JSON complexes en Go à l'aide de « json.Unmarshal » ?
Comment analyser un JSON complexe avec Go Unmarshal : dévoiler le fonctionnement interne
Le package encoding/json dans Go propose le json.Unmarshal fonction pour simplifier les tâches d’analyse JSON. Cependant, rencontrer des structures JSON complexes peut s'avérer difficile.
Décodage dans une interface{}
Pour les données JSON inconnues, on peut les décoder dans une interface{} à l'aide d'Unmarshal. . Cette approche aboutit à une valeur map[string]interface{} où les clés sont des chaînes et les valeurs sont des types interface{}.
Par exemple, considérons le JSON suivant :
{ "k1" : "v1", "k2" : "v2", "k3" : 10, "result" : [ [ ["v4", v5, {"k11" : "v11", "k22" : "v22"}] , ... , ["v4", v5, {"k33" : "v33", "k44" : "v44"} ] ], "v3" ] }
The Go code pour décoder et accéder à ces données :
package main import ( "encoding/json" "fmt" ) func main() { b := []byte(`{ "k1" : "v1", "k3" : 10, result:["v4",12.3,{"k11" : "v11", "k22" : "v22"}] }`) var f interface{} err := json.Unmarshal(b, &f) if err != nil { fmt.Println(err) return } m := f.(map[string]interface{}) for k, v := range m { switch vv := v.(type) { case string: fmt.Println(k, "is string", vv) case int: fmt.Println(k, "is int", vv) case []interface{}: fmt.Println(k, "is an array:") for i, u := range vv { fmt.Println(i, u) } default: fmt.Println(k, "is of a type I don't know how to handle") } } }
En affirmant le type d'interface et en utilisant un commutateur de type, il est possible de naviguer
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!