golang 反序列化出现json: cannot unmarshal string into Go value of type model.Phone

项目场景:

今天在项目公关的过程中,需要对interface{}类型进行转换为具体结构体


问题描述

很自然的用到了resultBytes, _ := json.Marshal(result),然后对resultBytes进行反序列化转换为对应的结构体err := json.Unmarshal(resultBytes, &phone),但是结果缺出现反序列化出错:

json: cannot unmarshal string into Go value of type model.Phone

var result interface{}
result = `{"name":"oppo", "price":3000, "Long": 700}`
resultBytes, _ := json.Marshal(result) 
err := json.Unmarshal(resultBytes, &phone)
if err != nil {
	fmt.Println("反序列化出错:", err)
	return
}

原因分析:

通过debug发现序列化后的resultBytes它是一个完完全全的字符串,里面的name、price都被加上了双引号,也就是整个变量本质上就是一个字符串。

golang 反序列化出现json: cannot unmarshal string into Go value of type model.Phone_第1张图片


解决方案:

这里不能对字符串进行序列化,因为你的目的是要转换为struct,我们只需要反序列化的时候将原字符串直接转换为[]byte即可,正确代码如下:

var result interface{}
result = `{"name":"oppo", "price":3000, "Long": 700}`
err := json.Unmarshal([]byte(result), &phone) // 这是正确的做法
if err != nil {
	fmt.Println("反序列化出错:", err)
	return
}
fmt.Printf("phone:%+v\n", phone)

你可能感兴趣的:(golang,json,go)