Beim Umgang mit JSON-Daten kann es vorkommen, dass Sie bestimmte Elemente innerhalb des JSON-Objekts einem zuordnen müssen Feld, das mit Ihrer Datenstruktur übereinstimmt. Der standardmäßige JSON-Unmarshaling-Mechanismus erfüllt diese Anforderungen jedoch möglicherweise nicht immer. Hier kommt das benutzerdefinierte Unmarshaling ins Spiel.
Im bereitgestellten Beispiel haben Sie eine Struktur OHLC_RESS mit einem Kartenfeldpaar, das Kerzenabschnitte als Werte erwartet. Allerdings kann der ursprüngliche Code die Paarzuordnung nicht füllen.
Das Unmarshaling-Verhalten ist auf mehrere Faktoren zurückzuführen:
Um diese Probleme zu beheben, können Sie die json.Unmarshaler-Schnittstelle nutzen, indem Sie die entsprechende Methode in Ihrer Struktur implementieren:
<code class="go">func (r *OHLC_RESS) UnmarshalJSON(d []byte) error { // Decode JSON object keys and values into raw messages. var obj map[string]json.RawMessage if err := json.Unmarshal(d, &obj); err != nil { return err } // Handle the "last" field. if last, ok := obj["last"]; ok { if err := json.Unmarshal(last, &r.Last); err != nil { return err } delete(obj, "last") } // Unmarshal 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 Lösung:
Durch die Implementierung dieses benutzerdefinierten Unmarshalings erhalten Sie die Flexibilität, zu steuern, wie spezifisch JSON-Elemente sind der gewünschten Datenstruktur zugeordnet, auch wenn die Struktur des JSON-Objekts nicht direkt damit übereinstimmt.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Struktur in Go benutzerdefiniert in eine Karte von Slices entmarshalieren, wenn die JSON-Schlüssel nicht mit den Feldnamen der Struktur übereinstimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!