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

Как анализировать нестандартные форматы времени из JSON в Golang?

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

How to Parse Non-Standard Time Formats from JSON in Golang?

Разбор нестандартного формата времени из JSON

При декодировании данных JSON в пользовательскую структуру могут возникнуть несоответствия в форматах дат. Чтобы решить эту проблему, Golang предоставляет возможность реализации пользовательских функций маршалирования и демаршалинга.

Пользовательские функции маршалера и демаршалинга

Чтобы указать собственный формат синтаксического анализа, псевдоним типа имеет вид создается для поля времени, а интерфейсы Marshaler и Unmarshaler реализованы следующим образом:

type JsonBirthDate time.Time

// UnmarshalJSON translates a JSON string to a time value.
func (j *JsonBirthDate) UnmarshalJSON(b []byte) error {
    s := strings.Trim(string(b), `"`)
    t, err := time.Parse("2006-01-02", s)
    if err != nil {
        return err
    }
    *j = JsonBirthDate(t)
    return nil
}

// MarshalJSON converts a time value to a JSON string.
func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

Эта пользовательская логика проверяет, соответствует ли значение JSON нужному формату, и соответствующим образом анализирует его.

Обновленная структура и синтаксический анализ

Структура обновлен для использования пользовательского типа, и декодирование может продолжаться как обычно:

type Person struct {
    Name string `json:"name"`
    BirthDate JsonBirthDate `json:"birth_date"`
}

decoder := json.NewDecoder(req.Body)
if err := decoder.Decode(&person); err != nil {
    log.Println(err)
}

Дополнительные функции

Для удобства можно добавить метод Format, обеспечивающий форматированное представление даты:

// Format prints the date using the specified format string.
func (j JsonBirthDate) Format(s string) string {
    t := time.Time(j)
    return t.Format(s)
}

Этот индивидуальный подход к маршалингу и демаршалингу позволяет гибко анализировать значения времени из JSON, даже если они отличаются от стандартных форматов.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3