JSON-Dekodierung in Strukturen vs. Karten
Im beschriebenen Szenario empfängt eine Anwendung eine Schnittstelle{}, die eine Struktur enthält, die dem JSON entspricht Struktur als Byte-Array empfangen. Bei der JSON-Dekodierung ist das Ergebnis jedoch eine Karte anstelle der erwarteten Struktur.
Dieses Verhalten ist auf die Art und Weise zurückzuführen, wie json.Unmarshal Zeiger verarbeitet. Durch den Verweis auf eine Schnittstelle{}, die ursprünglich die Struktur enthielt, kann der Dekodierungsprozess den zugrunde liegenden Typ nicht ermitteln. Als Ergebnis wird eine einfache Karte anstelle der gewünschten Struktur zurückgegeben.
Um dieses Problem zu beheben, können zwei Ansätze in Betracht gezogen werden:
1. Direktes Interface-Casting:
Übergeben Sie einen Zeiger auf die Struktur direkt an json.Unmarshal als abstrakte Schnittstelle:
<code class="go">var ping interface{} = &Ping{} deserialize([]byte(`{"id":42}`), ping)</code>
2. Reflexionsbasierte Zeigererstellung:
Wenn kein direkter Zeiger auf die Struktur verfügbar ist, verwenden Sie Reflexion, um einen neuen Zeiger zu erstellen, ihn zu deserialisieren und den Wert zurück zu kopieren:
<code class="go">var ping interface{} = Ping{} nptr := reflect.New(reflect.TypeOf(ping)) deserialize([]byte(`{"id":42}`), nptr.Interface()) ping = nptr.Interface()</code>
Durch die Übernahme eines dieser Ansätze kann der Dekodierungsprozess die zugrunde liegende Struktur korrekt identifizieren und ihre Felder aus den JSON-Daten füllen.
Das obige ist der detaillierte Inhalt vonHier sind einige Titeloptionen, die sich auf das Problem und die Lösung konzentrieren: **Direkte Frage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!