«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как настроить демаршалинг JSON с помощью разделения строк в Go?

Как настроить демаршалинг JSON с помощью разделения строк в Go?

Опубликовано 1 ноября 2024 г.
Просматривать:149

How to Customize JSON Unmarshaling with String Split in Go?

Пользовательская демаршалинг с разделением строк в 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