func main() { content:="{\"dd\":\"dd\",\"ff\":[\"lent\"]}" var v interface{} d8(content,v) d9(content,v) } func d9(content string,vv interface{}){ err := json.Unmarshal([]byte(content),&vv) if err != nil{ panic(err) } else{ // 如果有ok做判断,强转失败就会出现为false的情况,如果为false,则不可以再使用强转失败的对象,不然会报错 if mp,mpOk := vv.(map[string] interface{}); mpOk{ loanStatusObj := mp["ff"] // 如果有ok做判断,强转失败就会出现为false的情况,如果为false,则不可以再使用强转失败的对象,不然会报错。 // 这里已经强转会失败的。 loanStatus := loanStatusObj.(string) fmt.Println(loanStatus) } } } func d8(content string,mpOk := vv.(map[string] interface{}); mpOk{ loanStatusObj := mp["ff"] // 如果有ok做判断,强转失败就会出现为false的情况,如果为false,则不可以再使用强转失败的对象,不然会报错。 // 这里已经强转会失败的,但通过loanStatusOk来避免了使用loanStatus对象 if loanStatus,loanStatusOk := loanStatusObj.(string); loanStatusOk{ fmt.Println(loanStatus) } else{ fmt.Println("格式不对,但不会出现异常") fmt.Println("loanStatusOk = " + strconv.FormatBool(loanStatusOk)) } } } }
代码截图:
运行结果: