Maison >développement back-end >Golang >Comment gérer les chaînes JSON imbriquées lors du démarshalage dans Go ?
Désagrégation du JSON avec des chaînes imbriquées
Lorsque vous rencontrez une erreur indiquant "Impossible de désorganiser la chaîne dans le champ de structure Go", cela signifie que le JSON est analysé contient une valeur de chaîne dans un champ qui devrait être une structure. Pour résoudre ce problème, envisagez l'approche suivante :
import ( "encoding/json" "fmt" "log" ) 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"` } func main() { exemplar := `{ "schemaVersion": 1, "name": "library/redis", "tag": "latest", "architecture": "amd64", "history": [ { "v1Compatibility": "{\"id\":\"ef8a93741134ad37c834c32836aefbd455ad4aa4d1b6a6402e4186dfc1feeb88\",\"parent\":\"9c8b347e3807201285053a5413109b4235cca7d0b35e7e6b36554995cfd59820\",\"created\":\"2017-10-10T02:53:19.011435683Z\"}" } ] } ` var jsonManResp ManifestResponse if err := json.Unmarshal([]byte(exemplar), &jsonManResp); err != nil { log.Fatal(err) } 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 } fmt.Println(jsonManResp) }
Dans ce code mis à jour, nous déclarons V1CompatibilityRaw en tant que champ de chaîne dans ManifestResponse.History, puis le désassemblons manuellement dans une structure V1Compatibility.
Cette approche permet une désérialisation appropriée de la réponse JSON dans la structure Go souhaitée, garantissant que la chaîne imbriquée est analysée correctement.
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!