我正在嘗試將針對 go1.3 編寫的一些代碼移植到當前版本,并遇到了 json 解析行為在版本之間不同的情況。我們正在使用自定義解組器來解析某些特定的日期格式??雌饋碜罱陌姹驹谧址袀鬟f了額外的引號,而 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 關注
- 262 瀏覽
添加回答
舉報
0/150
提交
取消