Wie deserialisiere ich mehrere JSON-Nachrichtentypen effizient in Go Websocket mit json.RawMessage?

Patricia Arquette
Freigeben: 2024-11-24 03:51:14
Original
890 Leute haben es durchsucht

How to Deserialize Multiple JSON Message Types Efficiently in Go Websocket Using json.RawMessage?

Go Websocket: Deserialisierung mehrerer JSON-Nachrichtentypen mithilfe von json.RawMessage

Bei der Arbeit mit Gorilla Websocket werden eingehende JSON-Nachrichten mehrerer Typen verarbeitet kann eine Herausforderung darstellen. Die separate Verwendung der ReadJSON-Methode für jeden Typ kann umständlich sein. In diesem Artikel wird eine Lösung untersucht, die den Typ json.RawMessage verwendet, um die Deserialisierung effizient durchzuführen.

Problem:

Wie können wir eingehende JSON-Nachrichten basierend auf a in verschiedene Strukturen deserialisieren? Steuerfeld im JSON, ohne mehrere ReadJSON zu verwenden Aufrufe?

Lösung:

Definieren Sie eine Wrapper-Struktur für Nachrichten mit einem Steuerfeld zur Angabe des Typs der tatsächlichen Daten und einem X-Feld vom Typ json.RawMessage zum Halten die serialisierten Daten.

type Messages struct {
    Control string          `json:"control"`
    X       json.RawMessage `json:"X"`
}
Nach dem Login kopieren

Entpacken Sie die eingehende JSON-Nachricht in die Nachrichten struct.

var m Messages
err := c.ReadJSON(&m)
Nach dem Login kopieren

Untersuchen Sie das Steuerfeld, um den tatsächlichen Typ der Daten zu bestimmen. Entpacken Sie das

Das obige ist der detaillierte Inhalt vonWie deserialisiere ich mehrere JSON-Nachrichtentypen effizient in Go Websocket mit json.RawMessage?. 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