【发布时间】:2022-11-14 07:51:36
【问题描述】:
我正在使用 JOIN、CONCAT、GROUP_CONCAT、JSON_OBJECT 从多个表中读取数据。使用 gorm 将数据读入下面提到的模型。
type OrgUserDisPublisherData struct {
Disciplines datatypes.JSON `json:"disciplines" example:"[]"`
User datatypes.JSON `json:"user"`
}
此过程已成功完成。但是当我尝试将 OrgUserDisPublisherData.Disciplines 解组为另一个具有 time.Time 数据类型的结构时。我收到以下错误 parsing time "\"2022-11-03 07:08:09.000000\"" as "\"2006-01-02T15:04:05Z07:00\"": cannot parse " 07:08:09.000000\"" as "T"
用于解组的最终模型
type Discipline struct {
Name string `json:"name"`
Code string `json:"code"`
IsPrimary uint `json:"isPrimary"`
IsAligned uint `json:"isAligned"`
IsTrainingFaculty uint `json:"isTrainingFaculty"`
AlignmentDate time.Time `json:"alignmentDate"`
UnalignmentDate time.Time `json:"UnalignmentDate"`
ExpiryDate time.Time `json:"expiryDate"`
ExternalId string `json:"externalId"`
Status string `json:"status"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
同时,在向表中插入数据时,使用了相同的模型,并且不会引发任何与时间相关的错误。 我如何在解组时处理时间,而不管时间属性中存在的数据如何?
【问题讨论】:
-
如果您的输入不符合 RFC-3339,您应该使用自定义编组器声明您自己的时间类型。这篇文章可能对你有所帮助:romangaranin.net/posts/2021-02-19-json-time-and-golang
-
声明新类型的替代方法是确保查询创建的 JSON 对象中的时间戳值具有
time.Time的UnmarshalJSON所期望的格式;这你可以用to_char来做,例如to_char(created_at, 'YYYY-MM-DDTHH24:MI:SSTZH:TZM')。
标签: json go go-gorm go-structtag