Heim >Backend-Entwicklung >Golang >Warum erhalte ich während der JSON-Deserialisierung den Fehler „Schnittstellenkonvertierung: Schnittstelle {} ist Map[string]Schnittstelle {}, nicht main.Data'?

Warum erhalte ich während der JSON-Deserialisierung den Fehler „Schnittstellenkonvertierung: Schnittstelle {} ist Map[string]Schnittstelle {}, nicht main.Data'?

Linda Hamilton
Linda HamiltonOriginal
2024-11-14 12:33:021026Durchsuche

Why am I getting an

Fehler bei der Schnittstellenkonvertierung während der JSON-Deserialisierung

Beim Versuch, komplexe Datenstrukturen aus JSON zu deserialisieren, ist es wichtig, die ordnungsgemäße Handhabung von Schnittstellen sicherzustellen, um dies zu vermeiden Laufzeitfehler. Betrachten Sie den folgenden Code:

type Data struct {
    Content string
    Links   []string
}

func main() {
    anInterface := interface{}{/* JSON data here */}

    // Assertion to Data interface
    AData2 := anInterface.(Data)
}

Bei der Ausführung gibt das Programm einen Fehler aus:

panic: interface conversion: interface {} is map[string]interface {}, not main.Data

Das Problem verstehen

Der Fehler liegt vor aus dem Versuch, eine Schnittstelle, die eine Zuordnung von String-Schnittstellen-Paaren enthält, direkt in eine Datenstruktur zu übernehmen. Go erwartet, dass die Schnittstelle einen Datenwert enthält, aber der eigentliche Inhalt ist eine Karte.

Lösung

Um dieses Problem zu lösen, ist es wichtig, die Natur von Schnittstellen zu verstehen . Eine Schnittstelle ist einfach ein Vertrag, der eine Reihe von Methoden definiert, die ein Typ implementieren muss. Um eine Schnittstelle für einen bestimmten Typ zu aktivieren, muss die Schnittstelle zuvor mit dem Wert dieses Typs gefüllt worden sein.

In diesem Fall sollten die folgenden Änderungen vorgenommen werden:

  1. Die Schnittstelle füllen mit einem Datenwert:
anInterface = Data{Content: "hello world", Links: []string{"link1", "link2", "link3"}}
  1. Bestätigen Sie die Schnittstelle zu Daten:
AData2 = anInterface.(Data)

Dadurch wird sichergestellt, dass die Schnittstelle den richtigen Typ enthält, bevor versucht wird, ihn in Daten zu konvertieren.

Alternativer Ansatz

Ein anderer Ansatz besteht darin, die JSON-Daten direkt in die gewünschte Datenstruktur zu entmarshalieren:

var AData2 Data

err := json.Unmarshal([]byte(jsonStr), &AData2)
if err != nil {
    panic(err)
}

Das obige ist der detaillierte Inhalt vonWarum erhalte ich während der JSON-Deserialisierung den Fehler „Schnittstellenkonvertierung: Schnittstelle {} ist Map[string]Schnittstelle {}, nicht main.Data'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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