解组格式不正确的日期时间
当遇到具有格式不正确的日期时间字段的 JSON 时,设计一个强大的策略来解析和解组它们变得至关重要进入 Go 结构体。不正确的格式通常涉及时区偏移量中缺少冒号字符“:”,从而导致解组错误。
解决方案:自定义类型和 UnmarshalJSON 方法
至要解决此问题,可以定义自定义类型来支持正确和不正确的格式:
<code class="go">type MyTime struct { time.Time } func (self *MyTime) UnmarshalJSON(b []byte) (err error) { s := string(b) s = s[1:len(s)-1] t, err := time.Parse(time.RFC3339Nano, s) if err != nil { t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s) } self.Time = t return }</code>
解组时,会调用此类型的 UnmarshalJSON 方法。它首先从 JSON 字符串中删除周围的引号。然后,它尝试使用标准 time.RFC3339Nano 格式解析日期时间。如果失败,它将继续尝试使用不带冒号字符的不正确格式进行解析(“2006-01-02T15:04:05.999999999Z0700”)。
结构体定义
要在 Go 结构中使用此自定义类型:
<code class="go">type Test struct { Time MyTime `json:"time"` }</code>
这确保可以将具有正确和不正确日期时间格式的 JSON 解组到同一个 Go 结构中。
结论
通过使用合适的 UnmarshalJSON 方法定义自定义时间字段类型,可以在 Go 程序中无缝解析和解组格式不正确的日期时间字段。这允许在处理输入数据时具有更大的灵活性,并确保 Go 结构表示准确地反映数据,无论其格式如何。
以上是如何在 Go 中解组格式不正确的日期时间?的详细内容。更多信息请关注PHP中文网其他相关文章!