Go语言中无法反序列化JSON数组的问题排查
问题原因及解决方法
问题出在JSON结构与接收的结构体不匹配:
- 你的JSON顶层是数组(
[]包裹),但你定义的CustTypes是包含切片字段的结构体,本质是键值对结构。json.Unmarshal无法将数组直接映射到带键的结构体上,因此反序列化后没有数据。 - 你跳过
id字段的做法是正确的,Go的JSON解析会自动忽略结构体中未定义的JSON字段,这部分不影响结果。
解决方法
方法一:直接用切片接收(推荐)
不需要外层的CustTypes结构体,直接将JSON数组反序列化为[]CustType类型:
var e []CustType err := json.Unmarshal([]byte(str), &e) if err != nil { // 处理反序列化错误,例如打印err信息 }
这样就能正确获取数组中的数据。
方法二:修改结构体适配JSON(仅当能修改JSON格式时使用)
如果一定要用CustTypes结构体,需要把JSON改成顶层包含MyTypes键的对象格式:
{ "MyTypes": [ {"name": "foo", "age": "12", "id": "12"}, {"name": "foo", "age": "12", "id": "12"} ] }
此时原有的反序列化代码即可正常工作。
内容的提问来源于stack exchange,提问作者James Franco
相关产品推荐
相关产品推荐

