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

Go语言json.Unmarshal失效求助:已导出字段仍无法解析JSON

问题分析与解决

你的问题源于两个关键疏漏,直接导致了解析失败却无错误提示的情况:

1. JSON文件存在语法错误

你提供的JSON内容不完整,最后一个对象末尾多了逗号,且未闭合数组和外层对象。正确的完整JSON应该是:

{
  "student_class": [
    {
      "student_id": 1,
      "class_id": 2
    },
    {
      "student_id": 1,
      "class_id": 1
    }
  ]
}

错误的JSON语法会触发解析异常,但你没有捕获json.Unmarshal的返回错误,因此看不到问题提示。

2. 顶层结构体字段缺少JSON标签匹配

你的StudentClasses结构体字段StudentClasses未指定JSON标签,无法和JSON中的student_class键建立映射关系,需要补充标签:

package studentClass

type StudentClasses struct {
    StudentClasses []StudentClass `json:"student_class"` // 新增JSON标签匹配键名
}

type StudentClass struct {
    StudentId int `json:"student_id"`
    ClassId   int `json:"class_id"`
}

3. 补充关键环节的错误处理

必须捕获io.ReadAll和json.Unmarshal的错误,避免隐性问题被忽略:

func Read() {
    var studentClasses studentClass.StudentClasses
    jsonFile, err := os.Open("db/student_class.json")
    if err != nil {
        fmt.Println("打开文件失败:", err)
        return
    }
    defer jsonFile.Close()

    byteValue, err := io.ReadAll(jsonFile)
    if err != nil {
        fmt.Println("读取文件失败:", err)
        return
    }
    
    err = json.Unmarshal(byteValue, &studentClasses)
    if err != nil {
        fmt.Println("JSON解析失败:", err)
        return
    }

    for _, sc := range studentClasses.StudentClasses {
        fmt.Println(sc)
    }
}

完成以上修改后,JSON解析即可正常工作,输出对应的StudentClass实例。

内容的提问来源于stack exchange,提问作者Stupid dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:55:18