Maison >développement back-end >Golang >Comment désorganiser le JSON imbriqué dans un champ de chaîne dans Go ?
Impossible de désérialiser la chaîne dans le champ Go Struct
Lors de la tentative de désérialisation d'une réponse de l'API Docker, l'erreur "json : impossible de désérialiser la chaîne dans Go champ de structure .v1Compatibility" se produit. La structure JSON définit un champ v1Compatibility sous forme de chaîne, mais la réponse réelle contient une chaîne JSON dans ce champ.
Pour résoudre ce problème, une approche de démarshaling en deux passes est requise :
Voici la structure Go modifiée :
type ManifestResponse struct { Name string `json:"name"` Tag string `json:"tag"` Architecture string `json:"architecture"` FsLayers []struct { BlobSum string `json:"blobSum"` } `json:"fsLayers"` History []struct { V1CompatibilityRaw string `json:"v1Compatibility"` V1Compatibility V1Compatibility } `json:"history"` } type V1Compatibility struct { ID string `json:"id"` Parent string `json:"parent"` Created string `json:"created"` }
Après avoir décomposé la chaîne JSON brute, le champ V1Compatibility peut être mis à jour avec les données analysées :
for i := range jsonManResp.History { var comp V1Compatibility if err := json.Unmarshal([]byte(jsonManResp.History[i].V1CompatibilityRaw), &comp); err != nil { log.Fatal(err) } jsonManResp.History[i].V1Compatibility = comp }
Cette approche en deux passes gère efficacement la situation où un champ de chaîne dans le JSON la réponse contient du contenu JSON imbriqué.
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!