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
Freigeben: 2024-11-14 12:33:02
Original
1042 Leute haben es durchsucht

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

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

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

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"}}
Nach dem Login kopieren
  1. Bestätigen Sie die Schnittstelle zu Daten:
AData2 = anInterface.(Data)
Nach dem Login kopieren

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

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!

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