Пользовательская демаршалинг с разделением строк в Go
При работе с данными JSON часто возникает необходимость преобразовать или настроить процесс демаршалинга для конкретных типы данных. В этом случае мы хотим разделить строку JSON, содержащую значения, разделенные запятыми, на фрагмент []строки во время демаршаллинга.
Чтобы добиться этого, давайте реализуем собственный демаршалер для типа []строки:
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
}
Этот пользовательский демаршалер принимает необработанные данные JSON в качестве входных данных и преобразует их в фрагмент строк, разделяя их по указанному разделителю («-» в данном случае).
В нашем оригинале struct, теперь мы можем использовать этот пользовательский тип для поля «Предметы»:
type Student struct {
StudentNumber int `json:"student_number"`
Name string `json:"name"`
Subjects strslice `json:"subjects"`
}
Это позволяет нам демаршалировать данные JSON непосредственно в структуру, при этом поле «Субъекты» автоматически разбивается на отдельные строки:
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]}
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3