Unmarshaling von JSON in eine Schnittstelle{} ermöglicht die Verarbeitung einer Vielzahl von Datentypen. Die direkte Angabe des Typs der nicht gemarshallten Schnittstelle {} stellt jedoch eine Herausforderung dar.
Im gegebenen Szenario wird die Schnittstelle {} aus einer empfangenen Nachricht entmarshallt. Der Versuch, an dieser Schnittstelle {} einen Typwechsel durchzuführen, wie im Codeausschnitt gezeigt, führt zu unerwarteten Ergebnissen, da der Typ als „map[string]interface{}“ deklariert wird.
Um dieses Problem zu beheben, ist es wichtig zu verstehen die Standardtypen, in die das JSON-Paket das Unmarshalling durchführt, wie in seinem Paket aufgeführt Dokumentation:
Da das Unmarshaling ist in eine Schnittstelle {} ausgeführt wird, wird der resultierende Typ auf diesen Satz beschränkt. Daher kennt das Paket keine benutzerdefinierten Strukturen wie Something1 und Something2.
Lösungsoptionen:
1. Direktes Unmarshaling:
Um die Zwischenverarbeitung von Schnittstellen{} zu vermeiden, können JSON-Daten direkt in den gewünschten Strukturtyp entmarshaliert werden. Zum Beispiel:
var job Something1 json.Unmarshal([]byte(msg), &job)
2. Von der generischen Schnittstelle konvertieren:
Wenn die Arbeit mit einer generischen Schnittstelle{} erforderlich ist, können die Daten manuell aus der Map[string]Schnittstelle{} entpackt werden. Hier ein Beispiel:
var input interface{} json.Unmarshal([]byte(msg), &input) if smth1, ok := input.(map[string]interface{}); ok { job := Something1{ Thing: smth1["thing"].(string), OtherThing: smth1["other_thing"].(int64), } }
3. Wrapper-Struktur:
In Fällen, in denen die Verarbeitung verschiedener Datentypen üblich ist, kann eine Wrapper-Struktur mit einer benutzerdefinierten UnmarshalJSON-Methode den Prozess vereinfachen. Diese Methode kann versuchen, die Daten in verschiedene Strukturen zu entpacken und das Datenfeld entsprechend festzulegen.
Das obige ist der detaillierte Inhalt vonWie kann ich JSON sicher in eine Schnittstelle{} einbinden und Typzusicherungen handhaben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!