我有结构 A 和 B。当 JSON 字符串 A 被解组为结构 A 时它是有效的,但是如果 JSON 字符串 A 被解组为结构 B 它仍然是成功的(这不应该)。有什么方法可以检测到错误的 JSON 输入已被错误地转换为错误的结构类型吗?请看下面的代码:package mainimport ( "encoding/json" "fmt")type A struct { Name string `json:"name"` Age int `json:"age"`}type B struct { Alamat string `json:"alamat"` Umur int `json:"umur"`}func main() { var structA A var structAA A valA := "{\"name\":\"budi\",\"age\":10}" valB := "{\"alamat\":\"jakarta\",\"umur\":120}" //correct case err := json.Unmarshal([]byte(valA), &structA) if err != nil { fmt.Println("fail unmarshal") } fmt.Println(structA.Name) fmt.Println(structA.Age) //unmarshalled successfully but with wrong json err = json.Unmarshal([]byte(valB), &structAA) if err != nil { fmt.Println("fail unmarshal") } fmt.Println(structAA.Name) fmt.Println(structAA.Age)}
1 回答
潇潇雨雨
TA贡献1833条经验 获得超4个赞
默认情况下,参考文档json.Unmarshal(data []byte, v interface{})
, 并不像您想象的那样工作:
默认情况下,没有相应结构字段的对象键将被忽略(参见 Decoder.DisallowUnknownFields 的替代方法)。
因此,JSON 属性alamat
和umur
您的属性valB
将被忽略,因为它们在结构中不匹配A
并且被设置为它们的默认类型。name
age
- 1 回答
- 0 关注
- 106 浏览
添加回答
举报
0/150
提交
取消