Golang Go语言中json时间转struct问题
Golang Go语言中json时间转struct问题
问题 1:
json 中的时间格式不标准"create_time":"2021-08-14 11:36:37"
在转为 struct 时,不能直接转为 time.Time 。
网上找了别人写好的 UnmarshalJSON 方法,依然不能解析。
问题 2:
将 struct 改为 string,输出是空。
在 go 中,json.Unmarshal 解析前的代码是 bytes 数组。手动执行 curl,得到的结果是有的。
自定义类型并实现 Unmarshal/Marshal 方法
更多关于Golang Go语言中json时间转struct问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
go<br>package util<br><br>import "time"<br><br>func ParseTime(value string) (time.Time, error) {<br> loc := time.FixedZone("UTC+8", +8*60*60)<br><br> return time.ParseInLocation("2006-01-02 15:04:05", value, loc)<br>}<br><br>func TimeFormat(t time.Time) string {<br> loc := time.FixedZone("UTC+8", +8*60*60)<br> return <a target="_blank" href="http://t.In" rel="nofollow noopener">t.In</a>(loc).Format("2006-01-02 15:04:05")<br>}<br><br>type MyTime time.Time<br><br>func (myT MyTime) MarshalText() (data []byte, err error) {<br> t := time.Time(myT)<br> data = []byte(TimeFormat(t))<br> return<br>}<br><br>func (myT *MyTime) UnmarshalText(text []byte) (err error) {<br> t := (*time.Time)(myT)<br> *t, err = ParseTime(string(text))<br> return<br>}<br>
然后go<br>type MonitorDiagnosisItem struct {<br> Time util.MyTime `json:"time"`<br>}<br>
学会了吗?
好详细,谢谢。我用了两个 struct 做转换,回头试试这种写法
在Go语言中,将JSON中的时间字符串转换为struct中的时间类型(通常是time.Time
)是一个常见问题。以下是一些常见的解决方法:
-
自定义时间格式解析: 使用
time.Time
类型并为其定义自定义的UnmarshalJSON方法。例如,如果你的JSON时间格式是"2006-01-02T15:04:05Z07:00"
,你可以这样做:type MyStruct struct { Timestamp time.Time `json:"timestamp"` } func (m *MyStruct) UnmarshalJSON(data []byte) error { type Alias MyStruct aux := &struct { Timestamp json.RawMessage `json:"timestamp"` *Alias }{ Alias: (*Alias)(m), } if err := json.Unmarshal(data, &aux); err != nil { return err } var err error aux.Timestamp, err = time.Parse(time.RFC3339, string(aux.Timestamp)) if err != nil { return err } return nil }
-
使用标准库的时间解析: 如果你的时间格式符合标准库的时间格式(如RFC3339),可以直接使用
time.Time
类型,并且JSON解析器会自动处理。 -
使用第三方库: 使用如
github.com/dustin/go-jsonpointer
和github.com/square/go-jose
等第三方库,这些库提供了更灵活的时间处理功能。
确保你的时间格式字符串与JSON中的时间格式完全匹配,以避免解析错误。在复杂的JSON结构中,自定义UnmarshalJSON方法可以提供更多的灵活性和控制。