Unmarshal personnalisé avec fractionnement de chaîne dans Go
Lorsque vous traitez des données JSON, il est souvent nécessaire de transformer ou de personnaliser le processus de démarshaling pour des besoins spécifiques. types de données. Dans ce cas, nous souhaitons diviser une chaîne JSON contenant des valeurs séparées par des virgules en une tranche de chaîne [] lors du démarshalling.
Pour y parvenir, implémentons un démarshaler personnalisé pour le type de chaîne [] :
type strslice []string
func (ss *strslice) UnmarshalJSON(data []byte) error {
var s string
if err := json.Unmarshal(data, &s); err != nil {
return err
}
*ss = strings.Split(s, "-")
return nil
}
Ce démarshaler personnalisé prend les données JSON brutes en entrée et les convertit en une tranche de chaînes en les divisant sur le délimiteur spécifié ("-" dans ce cas).
Dans notre original struct, nous pouvons maintenant utiliser ce type personnalisé pour le champ Sujets :
type Student struct {
StudentNumber int `json:"student_number"`
Name string `json:"name"`
Subjects strslice `json:"subjects"`
}
Cela nous permet de désorganiser les données JSON directement dans la structure, le champ Sujets étant automatiquement divisé en chaînes individuelles :
json := `{"student_number":1234567, "name":"John Doe", "subjects":"Chemistry-Maths-History-Geography"}`
var s Student
if err := json.Unmarshal([]byte(json), &s); err != nil {
panic(err)
}
fmt.Println(s) // Output: {1234567 John Doe [Chemistry Maths History Geography]}
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3