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

DDD
Freigeben: 2024-11-06 19:38:02
Original
311 Leute haben es durchsucht

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

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

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

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

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!