Démarshalage personnalisé avec fractionnement de chaîne dans Golang
Problème :
Gestion du démarshalling JSON lorsqu'on Le champ nécessite d'être divisé en tranche à l'aide d'opérations sur les chaînes. Plus précisément, le champ « sujets » dans le JSON fourni nécessite d'être divisé sur « - » pour créer une []chaîne.
Solution :
Pour y parvenir, nous pouvons définissez un type de tranche de chaîne personnalisé et implémentez l'interface json.Unmarshaler pour celui-ci. Voici comment procéder :
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 type personnalisé nous permettra de désorganiser le champ "sujets" sous forme de chaîne, puis de le diviser automatiquement en tranche.
Struct révisé :
Maintenant, nous pouvons mettre à jour notre structure Student pour utiliser le type strslice personnalisé pour le champ "sujets":
type Student struct {
StudentNumber int `json:"student_number"`
Name string `json:"name"`
Subjects strslice `json:"subjects"`
}
Utilisation :
Avec ces modifications, nous pouvons désormais désorganiser le JSON fourni et diviser automatiquement le champ « Sujets » :
func main() {
var s Student
err := json.Unmarshal([]byte(src), &s)
fmt.Println(s, err)
}
const src = `{"student_number":1234567, "name":"John Doe", "subjects":"Chemistry-Maths-History-Geography"}`
Sortie :
{1234567 John Doe [Chemistry Maths History Geography]}
Cette approche fournit un moyen propre et personnalisable de gérer les transformations de champs tout en désorganisant les données JSON.
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