Heim >Backend-Entwicklung >Golang >Wie kann ich das Unmarshaling von JSON-Daten in bestimmte Strukturen in Go anpassen?
In Go ist das Unmarshaling von JSON-Daten in vordefinierte Strukturen eine häufige Aufgabe. Dieser Prozess kann jedoch komplexer werden, wenn Sie die nicht gemarshallte Datenstruktur weiter anpassen müssen. In diesem Artikel wird ein Ansatz untersucht, um den Unmarshaling-Prozess an bestimmte Anforderungen anzupassen.
Betrachten wir die folgenden JSON-Daten:
<code class="json">b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`)</code>
Ihr erster Ansatz bestand darin, eine Strukturnachricht mit zwei Feldern zu definieren: „Asks“ und „Asks“. Gebote, die jeweils eine Reihe von Floats enthalten. Sie suchen jedoch nach einer spezielleren Struktur, bei der diese Arrays Strukturen vom Typ Order statt einfacher Floats enthalten. Die gewünschte Datenstruktur sieht wie folgt aus:
<code class="go">type Message struct { Asks []Order `json:"Bids"` Bids []Order `json:"Asks"` } type Order struct { Price float64 Volume float64 }</code>
Um diese Anpassung zu erreichen, können wir die json.Unmarshaler-Schnittstelle von Go nutzen. Durch die Implementierung dieser Schnittstelle in der Order-Struktur stellen wir eine benutzerdefinierte Unmarshaling-Logik bereit, die die JSON-Array-Elemente in Order-Strukturen konvertiert.
<code class="go">func (o *Order) UnmarshalJSON(data []byte) error { var v [2]float64 if err := json.Unmarshal(data, &v); err != nil { return err } o.Price = v[0] o.Volume = v[1] return nil }</code>
Diese Implementierung gibt an, dass der Order-Typ aus einem 2-Element-Array dekodiert werden soll von Floats, wobei das erste Element den Preis und das zweite Element das Volumen darstellt.
Mit dieser benutzerdefinierten Unmarshaling-Logik können Sie jetzt die JSON-Daten effektiv in die gewünschte Strukturnachricht entmarshalieren.
<code class="go">m := new(Message) err := json.Unmarshal(b, &m) fmt.Println(m.Asks[0].Price)</code>
Mit der benutzerdefinierten UnmarshalJSON-Implementierung druckt dieser Code den Preis der ersten Briefbestellung. Dieser benutzerdefinierte Unmarshaling-Ansatz bietet eine flexible Möglichkeit, das Daten-Unmarshaling an spezifische Anforderungen in Go anzupassen.
Das obige ist der detaillierte Inhalt vonWie kann ich das Unmarshaling von JSON-Daten in bestimmte Strukturen in Go anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!