Tidak Boleh Unmarshal String ke Go Struct Field
Dalam percubaan untuk menyahsiri respons Docker API, ralat "json: cannot unmarshal string into Go medan struct .v1Keserasian" berlaku. Struktur JSON mentakrifkan medan Keserasian v1 sebagai rentetan, tetapi respons sebenar mengandungi rentetan JSON dalam medan tersebut.
Untuk menyelesaikan isu ini, pendekatan unmarshaling dua hala diperlukan:
Berikut ialah struct Go yang diubah suai:
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"` }
Selepas menyahmarshall rentetan JSON mentah, medan V1Compatibility boleh dikemas kini dengan yang dihuraikan data:
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 }
Pendekatan dua hala ini berkesan mengendalikan situasi di mana rentetan medan dalam respons JSON mengandungi kandungan JSON bersarang.
Atas ialah kandungan terperinci Bagaimana untuk Unmarshal Nested JSON dalam Medan String dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!