Heim >Backend-Entwicklung >Golang >Wie behebt man den Fehler „json: string into Go struct field kann nicht entmarshaliert werden' in der Docker-Manifest-Dekodierung?
„Zeichenfolge kann nicht in Go-Strukturfeld entmarshaliert werden“ Fehler bei der Manifest-Dekodierung
Beim Deserialisieren einer JSON-Antwort von der Docker-API wird der Fehler „ json: String kann nicht in das Go-Strukturfeld entmarshaliert werden. .v1Compatibility of type struct { ID string "json:"id"; Übergeordneter String „json:“parent“; Erstellter String „json:“created“}“ ist aufgetreten.
Das Problem ist auf eine Nichtübereinstimmung zwischen der Antwortstruktur und der Go-Strukturdefinition zurückzuführen. Insbesondere ist das Feld „v1Compatibility“ in der JSON-Antwort eine Zeichenfolge, die verschachtelten JSON-Inhalt enthält. Die Go-Struktur erwartet, dass es sich um eine native Go-Struktur handelt, was zum Unmarshalling-Fehler führt.
Um dieses Problem zu beheben, kann ein Unmarshalling-Ansatz mit zwei Durchgängen verwendet werden:
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"` }
Während des ersten Durchlaufen wird die JSON-Antwort mit dem V1CompatibilityRaw-Feld in die ManifestResponse-Struktur entmarshallt bevölkert:
var jsonManResp ManifestResponse if err := json.Unmarshal([]byte(response), &jsonManResp); err != nil { log.Fatal(err) }
Im zweiten Durchgang wird jeder V1CompatibilityRaw-Stringwert in die entsprechende V1Compatibility-Struktur entmarshallt:
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 }
Durch die Behandlung des verschachtelten JSON-Inhalts auf diese Weise wird der Fehler behoben aufgelöst und die richtigen Daten werden in die Go-Struktur entmarshallt.
Das obige ist der detaillierte Inhalt vonWie behebt man den Fehler „json: string into Go struct field kann nicht entmarshaliert werden' in der Docker-Manifest-Dekodierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!