String kann nicht in Go-Strukturfeld entmarshaliert werden
Beim Versuch, eine Docker-API-Antwort zu deserialisieren, wird der Fehler „json: String kann nicht in Go entmarshaliert werden“ angezeigt struct field .v1Compatibility“ auftritt. Die JSON-Struktur definiert ein v1-Kompatibilitätsfeld als Zeichenfolge, aber die eigentliche Antwort enthält eine JSON-Zeichenfolge in diesem Feld.
Um dieses Problem zu beheben, ist ein Unmarshaling-Ansatz in zwei Durchgängen erforderlich:
Hier ist die geänderte Go-Struktur:
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"` }
Nach dem Unmarshaling der rohen JSON-Zeichenfolge kann das V1Compatibility-Feld mit den analysierten Daten aktualisiert werden:
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 }
Dieser Ansatz mit zwei Durchgängen bewältigt effektiv die Situation, in der ein Zeichenfolgenfeld im JSON vorhanden ist Antwort enthält verschachtelten JSON-Inhalt.
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich verschachteltes JSON in einem String-Feld in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!