Heim > Backend-Entwicklung > Golang > Wie entmarshaliere ich verschachteltes JSON in einem String-Feld in Go?

Wie entmarshaliere ich verschachteltes JSON in einem String-Feld in Go?

Patricia Arquette
Freigeben: 2024-11-26 13:43:17
Original
214 Leute haben es durchsucht

How to Unmarshal Nested JSON within a String Field in Go?

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:

  1. Definieren Sie ein neues Feld, V1CompatibilityRaw, in der Go-Struktur, um den Rohzeichenfolgenwert zu erfassen.
  2. Unmarshalieren Sie den Rohwert JSON-Zeichenfolge in eine separate V1Compatibility-Struktur.

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 Login kopieren

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage