Comment désorganiser JSON dans une structure spécifique à l'aide de variables d'interface
Problème :
Quand En démarshalant JSON dans une variable d'interface, le package encoding/json l'interprète comme une carte. Comment pouvons-nous lui demander d'utiliser une structure spécifique à la place ?
Explication :
Le package JSON nécessite un type concret à cibler lors du démarshalage. Passer une variable interface{} ne fournit pas suffisamment d'informations et le package utilise par défaut map[string]interface{} pour les objets et []interface{} pour les tableaux.
Solution :
Il n'existe aucun moyen intégré pour dire à json.Unmarshal de se désorganiser en un type de structure concret à l'aide d'une variable d'interface. Cependant, il existe une solution de contournement :
func getFoo() interface{} { return &Foo{"bar"} }
err := json.Unmarshal(jsonBytes, fooInterface)
fmt.Printf("%T %+v", fooInterface, fooInterface)
Exemple :
Le code suivant illustre la technique :
package main import ( "encoding/json" "fmt" ) type Foo struct { Bar string `json:"bar"` } func getFoo() interface{} { return &Foo{"bar"} } func main() { fooInterface := getFoo() myJSON := `{"bar":"This is the new value of bar"}` jsonBytes := []byte(myJSON) err := json.Unmarshal(jsonBytes, fooInterface) if err != nil { fmt.Println(err) } fmt.Printf("%T %+v", fooInterface, fooInterface) // prints: *main.Foo &{Bar:This is the new value of bar} }
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!