Benutzerdefiniertes Unmarshalling mit String-Split in Go
Beim Unmarshalling von JSON in Go-Strukturen besteht das Standardverhalten darin, JSON-Werte in die entsprechende Struktur zu konvertieren Felder. Es gibt jedoch Szenarien, in denen Sie während des Unmarshalling-Vorgangs möglicherweise benutzerdefinierte Transformationen durchführen müssen.
Stellen Sie sich ein JSON-Objekt vor, bei dem „Subjekte“ als durch Kommas getrennte Zeichenfolge dargestellt werden. Um dies in eine Go-Struktur mit „subjects“ als Teil von Strings zu entmarshallen, müssen Sie den String beim Unmarshalling aufteilen.
Ein Ansatz besteht darin, einen benutzerdefinierten Unmarshaller für das Feld „subjects“ mithilfe des JSON zu implementieren. Unmarshaler-Schnittstelle. So können Sie dies erreichen:
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 }
Verwenden Sie in Ihrer Strukturdefinition den benutzerdefinierten Slice-Typ für das Feld „Subjekte“:
type Student struct { StudentNumber int Name string Subjects SubjectSlice }
Wenn Sie das JSON mit diesem benutzerdefinierten Unmarshalieren unmarshaller, das Feld „subjects“ wird automatisch in einen Abschnitt von Zeichenfolgen aufgeteilt.
Betrachten Sie beispielsweise den folgenden JSON:
{"student_number":1234567, "name":"John Doe", "subjects":"Chemistry-Maths-History-Geography"}
Unmarshaling in der Student-Struktur mit dem benutzerdefinierten Unmarshaller würde Folgendes zur Folge haben:
s := Student{ StudentNumber: 1234567, Name: "John Doe", Subjects: []string{"Chemistry", "Maths", "History", "Geography"}, }
Durch die Implementierung benutzerdefinierter Unmarshaller können Sie komplexe Datentransformationen während des Unmarshallings verarbeiten, was es zu einem leistungsstarken Werkzeug für die Arbeit mit benutzerdefinierten Datenstrukturen in JSON macht.
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich eine durch Kommas getrennte Zeichenfolge in Go mit benutzerdefiniertem Unmarshaling in ein Slice?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!