2 回答
TA贡献1780条经验 获得超1个赞
这里的问题是 GoLang 结构中日期/时间类型的默认 JSON 编组行为是使用 ISO8601 格式的日期/时间字符串。
这由错误消息中的格式字符串标识,带有T
日期和时间之间的分隔符以及时区后缀。JSON 字符串中的值Discipline
不符合此格式,缺少T
分隔符和任何时区。因此错误。
如果您可以影响 gorm 生成的 JSON 字符串的格式(我不熟悉,所以不能说您是否可以或如何这样做),那么最简单的解决方案是确保您的 JSON 字符串时间字段是格式为 ISO8601/RFC3339 字符串。
如果你无法控制它,那么你有两个选择:
通过中间体对 JSON 进行一些预处理
map[string]any
并重新格式化适当的字段。如果gorm
格式至少是一致的,那么这可能就像在空格上拆分字符串一样简单,从时间中删除最后的 3dps,附加一个适当的时区(或者只是如果时间是 UTC)然后用分隔符重新Z
组装T
。将自定义时间类型与
json.Marshaller
可以正确处理gorm
格式化值的实现一起使用(您仍然需要知道哪个时区适用于持久值并在编组时正确应用)。
这两者都容易受到日期/时间变量的 gorm 格式更改和误用的影响(在选项 #1 的情况下未能进行预处理,在选项 #2 的情况下错误地使用而不是自定义类型time.Time
) .
出于这个原因,如果可能的话,修改格式化输出gorm
将是我的首选方法。
TA贡献1793条经验 获得超6个赞
最快的解决方案是按照@Deltics 的建议,在从数据库中读取数据/值时对其进行格式化。
在从数据库查询数据时,使用 DATE_FORMAT() 我将数据格式化为 go/json 所需的格式
DATE_FORMAT(actual_data, '%Y-%m-%dT%TZ')
- 2 回答
- 0 关注
- 118 浏览
添加回答
举报