假设我有一个像
type A struct{ name string`json:"name"` }
然后在主要我有代码
var jsonString string = `{"status":false}` var a A error := json.Unmarshal([]byte(jsonString),&a)
显然,无论json格式不同,上述代码都会产生nil错误。Go中的json.Unmarshal()什么时候返回错误?
如果源中的值与目标中的值不对应,则JSON解码器不会报告错误。例如,如果源包含“状态”字段,这不是错误,但目标没有。
在其他情况下,Unmarshal函数确实会返回错误:
语法错误
type A struct { Name string `json:"name"` } data = []byte(`{"name":what?}`) err = json.Unmarshal(data, &a) fmt.Println(err) // prints character 'w' looking for beginning of value
类型不匹配
data := []byte(`{"name":false}`) type B struct { Name string `json:"name"` } var b B err = json.Unmarshal(data, &b) fmt.Println(err) // prints cannot unmarshal bool into Go value of type string
游乐场的例子