В 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