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

Как настроить макет JSON для полей time.Time в Golang?

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

How to Customize the JSON Layout for time.Time Fields in Golang?

Настройка макета JSON для time.Time в Golang

В Golang функция кодирования/json.Marshal обычно используется для преобразования объектов в JSON. Однако при настройках по умолчанию он может не соответствовать желаемому макету JSON. В этой статье показано решение, позволяющее переопределить макет по умолчанию и настроить формат, используемый полями time.Time во время маршалинга JSON.

Предположим, что у вас есть структура с полем time.Time с именем starttime. При маршалинге этой структуры в JSON вы хотите использовать определенный пользовательский макет.

s := {"starttime":time.Now(), "name":"ali"}

Для этого мы можем создать собственный тип, который встраивает time.Time и переопределяет методы MarshalText и MarshalJSON.

import "fmt"
import "time"
import "encoding/json"

type jsonTime struct {
    time.Time
    f string
}

func (j jsonTime) format() string {
    return j.Time.Format(j.f)
}

func (j jsonTime) MarshalText() ([]byte, error) {
    return []byte(j.format()), nil
}

func (j jsonTime) MarshalJSON() ([]byte, error) {
    return []byte(`"`   j.format()   `"`), nil
}

Переопределяя MarshalText, мы контролируем, как тип jsonTime преобразует свое значение в текстовую форму, что позволяет нам указать собственный макет. Кроме того, переопределив MarshalJSON, мы гарантируем, что переопределенный метод будет использоваться вместо встроенной реализации time.Time для маршалинга JSON.

С помощью пользовательского типа jsonTime теперь вы можете маршалировать свою структуру s, используя желаемый макет. :

jt := jsonTime{time.Now(), time.Kitchen}
x := map[string]interface{}{
    "foo": jt,
    "bar": "baz",
}
data, err := json.Marshal(x)
if err != nil {
    panic(err)
}

Это создаст строку JSON с полем времени начала, отформатированным в соответствии с макетом time.Kitchen.

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

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

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

Copyright© 2022 湘ICP备2022001581号-3