我正在尝试将针对 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。
- 1 回答
- 0 关注
- 216 浏览
添加回答
举报
0/150
提交
取消