Heim > Backend-Entwicklung > Golang > Wie kann ich JSON sicher in eine Schnittstelle{} einbinden und Typzusicherungen handhaben?

Wie kann ich JSON sicher in eine Schnittstelle{} einbinden und Typzusicherungen handhaben?

Linda Hamilton
Freigeben: 2024-12-17 11:59:25
Original
559 Leute haben es durchsucht

How to Safely Unmarshal JSON into an Interface{} and Handle Type Assertion?

Unmarshaling in eine Schnittstelle{} und Durchführen einer Typzusicherung

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:

  • bool
  • float64
  • string
  • []interface{}
  • map[string]interface{}
  • nil

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

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

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!

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