看个例子:
这里定义了一个解析结构体
type Response struct {
code int64
msg string
data string
}
执行json解析
func main() {
var resp Response
err:=json.Unmarshal([]byte(` {"code":200,"msg":"success","data":"Macbook Pro 2018 款"}`),&resp)
if err !=nil {
return
}else {
fmt.Println(resp)
}
}
image.png
然而json数据并没有成功解析到变量resp 中 ,为什么会这样呢?
刚刚说到了 GoLand是以字母大小写来限定访问域的 只有首字母大写才可以被导出(可以理解为 public ),子现在我们把 Response 改成这样 ,首字母大写 ,再来看看结果
type Response struct {
Code int64
Msg string
Data string
}
image.png
image.png
json数据成功解析了出来
这里有人可能注意到了 ,sutruct 里面的字段 和 json 字符串中的字段并不一致 。这里就是 GoLang json解析包 自动匹配的结果了(这里的自动匹配 是指不区分大小 ,但是字母还是要一样的),不信我们试试
这里我把字符串对应的字段 改成了这样
image.png
运行 结果
image.png
那json 字段是否可以不合struct 字段匹配呢? 当然也是可以的。
可以通过tag 指定 映射字段。
修改一下结构体:
type Response struct {
Code int64 `json:"status"`
Msg string `json:"message"`
Data string `json:"data"`
}
修改json 数据:
image.png
最后也是可以成功解析的