php小編子墨提示您,即使在進行JSON反序列化時,如果存在導出字段,json.Unmarshal函數也無法正常工作。這是因為JSON解析器只能解析導出字段,而無法辨識非導出字段。因此,在使用json.Unmarshal函數進行反序列化時,需要確保所需字段是導出字段,否則將無法正確解析JSON資料。這是在使用JSON序列化和反序列化時需要注意的一個重要問題,希望能對您有所幫助。
json 檔案:
{ "student_class": [ { "student_id": 1, "class_id": 2 }, { "student_id": 1, "class_id": 1 },
結構:
package studentclass type studentclasses struct { studentclasses []studentclass } type studentclass struct { studentid int `json:"student_id"` classid int `json:"class_id"` }
我的功能:
func Read() { var studentClasses studentClass.StudentClasses jsonFile, err := os.Open("db/student_class.json") if err != nil { fmt.Println(err) } defer jsonFile.Close() byteValue, _ := io.ReadAll(jsonFile) json.Unmarshal(byteValue, &studentClasses) for i := 0; i < len(studentClasses.StudentClasses); i++ { fmt.Println(studentClasses.StudentClasses[i]) } }
沒有回傳任何內容
當我在 json.unmarshall...
之後加上 fmt.println(studentclasses)
時,它會傳回 {[]}
json.unmarshal 錯誤為零
我研究過這個問題,但是和我有同樣問題的人說結構體的字段沒有導出。例: go json.unmarshal 不起作用 我不知道錯誤在哪裡以及我做錯了什麼 請幫我解決這個問題。謝謝大家!
您沒有指定 studentclasses 的 json 名稱。
type studentclasses struct { studentclasses []studentclass `json:"student_class"` }
範例:
package main import ( "encoding/json" "fmt" ) type StudentClasses struct { StudentClasses []StudentClass `json:"student_class,omitempty"` } type StudentClass struct { StudentId int `json:"student_id"` ClassId int `json:"class_id"` } func main() { _json := `{ "student_class": [ { "student_id": 1, "class_id": 2 }, { "student_id": 1, "class_id": 1 } ] }` var studentClasses StudentClasses json.Unmarshal([]byte(_json), &studentClasses) fmt.Printf("%+v", studentClasses) }
以上是即使有導出字段,json.Unmarshal 也不起作用的詳細內容。更多資訊請關注PHP中文網其他相關文章!