You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:27:07