Heim >Backend-Entwicklung >Golang >Wie kann ich das Unmarshaling von JSON-Daten in bestimmte Strukturen in Go anpassen?

Wie kann ich das Unmarshaling von JSON-Daten in bestimmte Strukturen in Go anpassen?

DDD
DDDOriginal
2024-11-06 19:38:02363Durchsuche

How to Customize Unmarshaling of JSON Data into Specific Structs in Go?

Benutzerdefiniertes Unmarshaling von JSON-Daten in bestimmte Strukturen

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!

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