Maison >développement back-end >Golang >Comment diviser un champ JSON en une tranche de chaîne lors du démarshalage dans Golang ?
Unmarshal personnalisé avec String Split dans Golang
Problème :
Gestion du démarshall 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 de le diviser 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 :
<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 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 » :
<code class="go">type Student struct { StudentNumber int `json:"student_number"` Name string `json:"name"` Subjects strslice `json:"subjects"` }</code>
Utilisation :
Avec ces modifications, nous pouvons désormais désorganiser le JSON fourni et diviser automatiquement le champ « sujets » :
<code class="go">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"}`</code>
Sortie :
{1234567 John Doe [Chemistry Maths History Geography]} <nil>
Ce Cette approche fournit un moyen propre et personnalisable de gérer les transformations de champs tout en désorganisant les données JSON.
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!