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
相关产品推荐
相关产品推荐

