


Wie entmarshaliere ich eine Struktur mit einer Slices-Karte in eine Slices-Karte in Go?
Benutzerdefiniertes Unmarshaling einer Struktur in eine Karte von Slices
In Go kann benutzerdefiniertes Unmarshaling verwendet werden, wenn das standardmäßige Unmarshaling-Verhalten nicht ausreicht. Stellen Sie sich das folgende Szenario vor: eine Struktur mit einem Kartenfeld, das aus einem JSON-Objekt mit dynamischen Schlüsseln gefüllt werden muss.
Beispielproblem
Der bereitgestellte Code demonstriert einen Versuch um eine JSON-Antwort in eine Struktur zu entmarshalieren, die eine Karte von Slice-Strukturen enthält (Paar-Map[String][]Kerzen). Allerdings bleibt die Karte nach dem Unmarshaling leer.
Lösung: Entscheidung für eine einfachere Struktur
Eine einfache Lösung besteht darin, die Karte zu entfernen und die Struktur so zu ändern, dass sie mit der übereinstimmt JSON-Struktur:
<code class="go">type OHLC_RESS struct { Pair []Candles `json:"XXBTZUSD"` Last int64 `json:"last"` }</code>
Benutzerdefiniertes Unmarshaling mit JSON.Unmarshaler
Um die kartenbasierte Struktur beizubehalten, ist alternativ eine benutzerdefinierte Implementierung der json.Unmarshaler-Schnittstelle erforderlich . Dieser Ansatz bietet vollständige Kontrolle über den Unmarshaling-Prozess.
Implementierungsdetails:
- Dekodieren Sie die Schlüssel des JSON-Objekts in nicht dekodierte JSON-Werte.
- Identifizieren Sie das „letzte“ Element und dekodieren Sie es, falls vorhanden, in das Feld „Last“.
- Deklarieren Sie die Paarkarte und durchlaufen Sie die verbleibenden Elemente im JSON-Objekt, um sie in die Karte zu dekodieren.
Code-Snippet:
<code class="go">func (r *OHLC_RESS) UnmarshalJSON(d []byte) error { // Decode keys only. var obj map[string]json.RawMessage if err := json.Unmarshal(d, &obj); err != nil { return err } // Decode "last" element. if last, ok := obj["last"]; ok { if err := json.Unmarshal(last, &r.Last); err != nil { return err } delete(obj, "last") } // Decode remaining elements into 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>
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich eine Struktur mit einer Slices-Karte in eine Slices-Karte in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie schreibe ich Dateien in Go Language bequem?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?
