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

我正在尝试将针对 go1.3 编写的一些代码移植到当前版本,并遇到了 json 解析行为在版本之间不同的情况。我们正在使用自定义解组器来解析某些特定的日期格式。看起来最近的版本在字符串中传递了额外的引号,而 1.3 没有。


这是错误还是有意更改?在这种情况下,编写与不同版本兼容的代码的最佳方式是什么。只是去寻找所有使用自定义解组器的地方,如果有的话,总是去掉额外的引号?不得不这样做会很遗憾 - 所以我希望有更好的方法。


package main


import "encoding/json"

import "fmt"

import "time"


type Timestamp1 time.Time


func (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)

}


梦里花落0921
浏览 217回答 1
1回答

江户川乱折腾

有一个错误就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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go