请问下: 下面的示例代码中,为什么第二种断言才能成功,第一种断言不成功?
json1 := `[{"aa":"astr1"},{"aa":"bstr1"}]`
var j1 []interface{}
json.Unmarshal([]byte(json1), &j1)
for k, v := range j1 {
fmt.Println(k, reflect.TypeOf(v).String())
if v2, ok := v.(map[string]string); ok {
println("断言成功")
println(v2["aa"])
} else if v2, ok := v.(map[string]interface{}); ok {
fmt.Println("键值为interface:")
fmt.Println(v2["aa"])
} else {
fmt.Println("失败:")
}
}
有疑问加站长微信联系(非本文作者)

手册里面写的很明天,对objects是map[string]interface{}
https://golang.google.cn/pkg/encoding/json/#Unmarshal
应该是因为每次断言只能断言一个点!!
你都打印了类型"fmt.Println(k, reflect.TypeOf(v).String())",必须完全保持一致啊。