Dans Go, le démarshaling implique la conversion de données JSON en une structure de données Go. Bien que les principes de base du démarshalage soient simples, des scénarios spécifiques, comme le remplissage d'une carte, peuvent nécessiter une gestion personnalisée.
Un problème courant rencontré est celui de la tentative de démarshaling. mapper dans une structure Go. Prenons l'exemple suivant :
<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>
Lors de la tentative de désagrégation des données JSON avec la structure ci-dessus, le champ Dernier est renseigné avec succès, mais la carte Pair reste vide.
Le processus de démarshaling par défaut dans Go utilise des noms de champs et des balises pour correspondre aux clés JSON. Cependant, dans ce cas, la mappe Pair nécessite une gestion personnalisée car ses noms de clés ne sont pas connus à l’avance. Pour y parvenir, implémentez l'interface json.Unmarshaler pour la structure OHLC_RESS :
<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>
Cette fonction de démarshalage personnalisée sépare le processus de décodage en étapes. Il décode d'abord les clés de l'objet, puis gère le "dernier" élément séparément et enfin, il décode les éléments restants dans la carte Pair. Cette approche permet de contrôler le processus de décodage et permet une gestion personnalisée de champs spécifiques comme la carte Pair.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!