Maison >développement back-end >Golang >Comment puis-je extraire efficacement des valeurs JSON spécifiques dans Go sans utiliser de structures ?
Analyse des valeurs JSON dans Go
Dans certains cas, extraire une valeur spécifique d'un objet JSON sans avoir besoin d'une structure est avantageux. Cet article explique comment y parvenir dans Go, en proposant des alternatives à l'approche plus traditionnelle consistant à procéder d'abord à la désorganisation dans une structure.
Option 1 : interface Map[string]{}
Go propose une solution intégrée pour stocker les valeurs JSON sans structure prédéfinie. À l'aide de la fonction json.Unmarshal, vous pouvez décoder le JSON en une map[string]interface{}, où les clés sont des chaînes représentant les noms de champs JSON et les valeurs sont les valeurs correspondantes en tant que types natifs Go.
Exemple :
b := []byte(`{"ask_price": "1.0"}`) data := make(map[string]interface{}) err := json.Unmarshal(b, &data) if err != nil { panic(err) } if price, ok := data["ask_price"].(string); ok { fmt.Println(price) } else { panic("wrong type") }
Cette approche vous permet d'accéder à la valeur spécifique dont vous avez besoin directement par son nom de propriété JSON, sans avoir besoin d'un champ de structure correspondant. Cependant, cela nécessite des assertions de type pour garantir que la valeur récupérée est le type attendu.
Option 2 : Unmarshaler personnalisé
Vous pouvez également implémenter un json.Unmarshaler personnalisé. interface pour votre type de cible pour gérer le processus de décodage plus spécifiquement. Cela offre plus de contrôle sur la façon dont les données JSON sont désorganisées dans la valeur Go souhaitée.
Exemple :
type AskPrice struct { price string } func (a *AskPrice) UnmarshalJSON(data []byte) error { var v string if err := json.Unmarshal(data, &v); err != nil { return err } a.price = v return nil } // ...
Avec cette approche, vous pouvez spécifier le démarshaller personnalisé en marquant le champ de structure correspondant avec json:"ask_price" et en utilisant le pointeur & récepteur pour garantir que la valeur décodée est affectée directement au champ struct. Cela élimine le besoin d'assertions de type explicites et offre une expérience de désorganisation plus personnalisée.
En examinant attentivement ces options, vous pouvez extraire efficacement des valeurs JSON spécifiques dans Go sans vous fier à des structures prédéfinies.
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!