Maison  >  Article  >  développement back-end  >  Comment personnaliser le démarshaling JSON avec String Split dans Go ?

Comment personnaliser le démarshaling JSON avec String Split dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 04:23:02477parcourir

How to Customize JSON Unmarshaling with String Split in Go?

Unmarshal personnalisé avec String Split in 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émarchage.

Pour y parvenir, implémentons un démarshaler personnalisé pour le type de chaîne [] :

<code class="go">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
}</code>

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 structure d'origine , nous pouvons maintenant utiliser ce type personnalisé pour le champ Sujets :

<code class="go">type Student struct {
    StudentNumber int      `json:"student_number"`
    Name          string   `json:"name"`
    Subjects      strslice `json:"subjects"`
}</code>

Cela nous permet de désorganiser les données JSON directement dans la structure, le champ Sujets étant automatiquement divisé en chaînes individuelles :

<code class="go">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]}</code>

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn