Heim  >  Artikel  >  Backend-Entwicklung  >  Hier sind einige Titeloptionen, die sich auf das Problem und die Lösung konzentrieren: **Direkte Frage

Hier sind einige Titeloptionen, die sich auf das Problem und die Lösung konzentrieren: **Direkte Frage

Linda Hamilton
Linda HamiltonOriginal
2024-10-25 11:43:02254Durchsuche

Here are a few title options, focusing on the problem and solution:

**Direct Question

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!

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