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
DDDOriginal
2024-11-06 11:31:02407Durchsuche

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>

Verwenden Sie Folgendes struct:

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

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>

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>

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>

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>

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!

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