为了账号安全,请及时绑定邮箱和手机立即绑定

golang 版本之间使用自定义解组器解析 json 的差异

golang 版本之间使用自定义解组器解析 json 的差异

Go
梦里花落0921 2021-11-29 19:37:50
我正在尝试将针对 go1.3 编写的一些代码移植到当前版本,并遇到了 json 解析行为在版本之间不同的情况。我们正在使用自定义解组器来解析某些特定的日期格式。看起来最近的版本在字符串中传递了额外的引号,而 1.3 没有。这是错误还是有意更改?在这种情况下,编写与不同版本兼容的代码的最佳方式是什么。只是去寻找所有使用自定义解组器的地方,如果有的话,总是去掉额外的引号?不得不这样做会很遗憾 - 所以我希望有更好的方法。package mainimport "encoding/json"import "fmt"import "time"type Timestamp1 time.Timefunc (t *Timestamp1) UnmarshalJSON(b []byte) (err error) {    fmt.Println("String to parse as timestamp:", string(b))    parsedTime, err := time.Parse("2006-01-02T15:04:05", string(b))    if err == nil {        *t = Timestamp1(parsedTime)        return nil    } else {        return err    }}type S struct {    LastUpdatedDate Timestamp1 `json:"last_updated_date,string"`}func main() {    s := `{"last_updated_date" : "2015-11-03T10:00:00"}`    var s1 S    err := json.Unmarshal([]byte(s), &s1)    fmt.Println(err)    fmt.Println(s1)}
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

一个错误json:",string"在于固定在1.5标签。如果没有特殊原因需要它,您可以删除它并简单地调整格式:

// N.B. time is in quotes.
parsedTime, err := time.Parse(`"2006-01-02T15:04:05"`, string(b))

游乐场:http : //play.golang.org/p/LgWuKcPEuI

这应该适用于 1.3 和 1.5。


查看完整回答
反对 回复 2021-11-29
  • 1 回答
  • 0 关注
  • 216 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信