Heim > Backend-Entwicklung > Golang > Wie entmarshaliere ich komplexe JSON-Daten in verschachtelte Strukturen in Go?

Wie entmarshaliere ich komplexe JSON-Daten in verschachtelte Strukturen in Go?

DDD
Freigeben: 2024-11-06 11:31:02
Original
417 Leute haben es durchsucht

How to Unmarshal Complex JSON Data into Nested Structures in Go?

Komplexe JSON-Daten in verschachtelte Strukturen entmarshalieren

In Go kann das Unmarshaling von JSON-Daten in komplexe Strukturen manchmal eine spezielle Handhabung erfordern. In diesem Artikel wird ein Szenario untersucht, in dem das gewünschte Ausgabeformat von der Standarddarstellung für Strukturen abweicht.

Das Problem

Berücksichtigen Sie die folgenden JSON-Daten:

<code class="json">b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`)</code>
Nach dem Login kopieren

Verwenden Sie Folgendes struct:

<code class="go">type Message struct {
    Asks [][]float64 `json:"Bids"`
    Bids [][]float64 `json:"Asks"`
}</code>
Nach dem Login kopieren

Wir können die Daten wie folgt entmarshalieren:

<code class="go">m := new(Message)
err := json.Unmarshal(b, &m)
if err != nil {
    // Handle error
}</code>
Nach dem Login kopieren

Wir würden die entmarshaleden Daten jedoch lieber im folgenden Format haben:

<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

Die Lösung

Um dies zu erreichen, können wir die json.Unmarshaler-Schnittstelle in unserer Order-Struktur implementieren:

<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

Dies weist den JSON-Decoder an, Order als 2-Elemente-Array zu behandeln von Floats anstelle eines Objekts.

Verwendung

Jetzt können wir die JSON-Daten entmarshalieren und wie gewünscht auf die Werte zugreifen:

<code class="go">m := new(Message)
err := json.Unmarshal(b, &m)
if err != nil {
    // Handle error
}

fmt.Println(m.Asks[0].Price)</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich komplexe JSON-Daten in verschachtelte Strukturen in Go?. 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