"tidak boleh menyahmarshal rentetan ke dalam medan struct Go" Ralat dalam Penyahkodan Manifes
Semasa menyahsiri respons JSON daripada Docker API, ralat " json: tidak boleh membuka rentetan ke dalam medan Go struct .v1Keserasian jenis struct { rentetan ID "json:"id"; Rentetan induk "json:"parent"; Rentetan yang dibuat "json:"created""}" ditemui.
Isu ini berpunca daripada ketidakpadanan antara struktur respons dan definisi struct Go. Khususnya, medan "v1Compatibility" dalam respons JSON ialah rentetan yang mengandungi kandungan JSON bersarang. Struk Go menjangkakan ia sebagai struct Go asli, yang membawa kepada ralat unmarshalling.
Untuk menyelesaikan masalah ini, pendekatan unmarshalling dua hala boleh digunakan:
type ManifestResponse struct { Name string `json:"name"` Tag string `json:"tag"` Architecture string `json:"architecture"` FsLayers []FSLayer `json:"fsLayers"` History []HistEntry } type FSLayer struct { BlobSum string `json:"blobSum"` } type HistEntry struct { V1CompatibilityRaw string `json:"v1Compatibility"` V1Compatibility V1Compatibility `json:"-"` } type V1Compatibility struct { ID string `json:"id"` Parent string `json:"parent"` Created string `json:"created"` }
Semasa yang pertama lulus, tindak balas JSON tidak dikawal ke dalam struct ManifestResponse dengan medan V1CompatibilityRaw dihuni:
var jsonManResp ManifestResponse if err := json.Unmarshal([]byte(response), &jsonManResp); err != nil { log.Fatal(err) }
Dalam laluan kedua, setiap nilai rentetan V1CompatibilityRaw tidak digabungkan ke dalam struct V1Compatibility yang sepadan:
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 }
Dengan mengendalikan kandungan JSON bersarang dengan cara ini, ralatnya ialah diselesaikan, dan data yang betul dibongkar ke dalam struct Go.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan \'json: tidak boleh unmarshal rentetan ke dalam medan Go struct\' Ralat dalam Penyahkodan Manifes Docker?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!