In Go umfasst das Unmarshaling die Konvertierung von JSON-Daten in eine Go-Datenstruktur. Während die Grundprinzipien des Unmarshaling unkompliziert sind, erfordern bestimmte Szenarien, wie das Auffüllen einer Karte, möglicherweise eine benutzerdefinierte Behandlung.
Ein häufig auftretendes Problem ist der Versuch, eine Karte zu entmarshalieren in eine Go-Struktur zuordnen. Betrachten Sie das folgende Beispiel:
<code class="go">type OHLC_RESS struct { Pair map[string][]Candles Last int64 `json:"last"` } // Candles represents individual candlesticks within the map. type Candles struct { // ... Time, Open, High, Low, Close, VWAP, Volume, Count fields omitted }</code>
Beim Versuch, JSON-Daten mit der obigen Struktur zu entmarshalieren, wird das Feld „Last“ erfolgreich ausgefüllt, aber die Paarzuordnung bleibt leer.
Der standardmäßige Unmarshaling-Prozess in Go verwendet Feldnamen und Tags, um JSON-Schlüsseln zuzuordnen. In diesem Fall muss die Pair-Map jedoch individuell behandelt werden, da ihre Schlüsselnamen nicht im Voraus bekannt sind. Um dies zu erreichen, implementieren Sie die json.Unmarshaler-Schnittstelle für die OHLC_RESS-Struktur:
<code class="go">func (r *OHLC_RESS) UnmarshalJSON(d []byte) error { // Decode only the object's keys and leave values as raw JSON. var obj map[string]json.RawMessage if err := json.Unmarshal(d, &obj); err != nil { return err } // Decode the "last" element into the Last field. if last, ok := obj["last"]; ok { if err := json.Unmarshal(last, &r.Last); err != nil { return err } delete(obj, "last") } // Decode the remaining elements into the Pair map. r.Pair = make(map[string][]Candles, len(obj)) for key, val := range obj { cc := []Candles{} if err := json.Unmarshal(val, &cc); err != nil { return err } r.Pair[key] = cc } return nil }</code>
Diese benutzerdefinierte Unmarshaling-Funktion unterteilt den Dekodierungsprozess in Schritte. Es dekodiert zunächst die Schlüssel des Objekts, behandelt dann das „letzte“ Element separat und dekodiert schließlich die verbleibenden Elemente in die Pair-Map. Dieser Ansatz gewährt die Kontrolle über den Dekodierungsprozess und ermöglicht die benutzerdefinierte Behandlung bestimmter Felder wie der Pair-Map.
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich eine JSON-Karte mit benutzerdefinierter Handhabung in eine Go-Struktur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!