Unmarshal personnalisé avec fractionnement de chaîne dans Go
Lors de la désorganisation de JSON en structures Go, le comportement par défaut consiste à convertir les valeurs JSON en structure correspondante champs. Cependant, il existe des scénarios dans lesquels vous devrez peut-être effectuer des transformations personnalisées pendant le processus de désorganisation.
Considérez un objet JSON avec des « sujets » représentés sous la forme d'une chaîne séparée par des virgules. Pour transformer cela en une structure Go avec des "sujets" sous forme de tranche de chaînes, vous devez diviser la chaîne lors de la désorganisation.
Une approche consiste à implémenter un démarshaller personnalisé pour le champ "sujets" à l'aide du json. Interface du démarshaler. Voici comment y parvenir :
type SubjectSlice []string // UnmarshalJSON implements custom unmarshalling for SubjectSlice. func (s *SubjectSlice) UnmarshalJSON(data []byte) error { var subjects string err := json.Unmarshal(data, &subjects) if err != nil { return err } *s = strings.Split(subjects, "-") return nil }
Dans la définition de votre structure, utilisez le type de tranche personnalisé pour le champ « sujets » :
type Student struct { StudentNumber int Name string Subjects SubjectSlice }
Lorsque vous désorganisez le JSON à l'aide de cette personnalisation unmarshaller, le champ « subjects » sera automatiquement divisé en une tranche de chaînes.
Par exemple, considérons le JSON suivant :
{"student_number":1234567, "name":"John Doe", "subjects":"Chemistry-Maths-History-Geography"}
Le démarshaling dans la structure Student avec le unmarshaller personnalisé entraînerait :
s := Student{ StudentNumber: 1234567, Name: "John Doe", Subjects: []string{"Chemistry", "Maths", "History", "Geography"}, }
En implémentant des désorganisateurs personnalisés, vous pouvez gérer des transformations de données complexes lors du démarchage, ce qui en fait un outil puissant pour travailler avec des structures de données personnalisées en 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!