php小編草莓分享一種解組JSON數據并將其存儲在Go語言結構中的方法。JSON是一種常用的數據交換格式,Go語言提供了方便的解析和處理JSON數據的工具包。通過使用Go語言內置的”json”包,我們可以輕松地將JSON數據解組成相應的結構體,并進行存儲和處理。這種方法簡單易懂,能夠幫助開發者高效地處理JSON數據,提升開發效率。下面我們來詳細介紹如何使用Go語言解組JSON數據,并將其存儲在結構體中。
問題內容
這是我在程序中使用 go struct 存儲的 json 測試數據
[ { "id": 393, "question": "the \"father\" of mysql is ______.", "description": null, "answers": { "answer_a": "bill joy", "answer_b": "stephanie wall", "answer_c": "bill gates", "answer_d": "michael widenius", "answer_e": null, "answer_f": null }, "multiple_correct_answers": "false", "correct_answers": { "answer_a_correct": "false", "answer_b_correct": "false", "answer_c_correct": "false", "answer_d_correct": "true", "answer_e_correct": "false", "answer_f_correct": "false" }, "correct_answer": "answer_a", "explanation": null, "tip": null, "tags": [ { "name": "mysql" } ], "category": "sql", "difficulty": "medium" } ]
登錄后復制
這是我編寫的用于存儲數據的函數,但無法獲得正確的響應,而不是在打印時得到一個空白結構
func FetchQuiz(num int, category string) { // write code to read json file jsonFile, err := os.Open("test.json") if err != nil { fmt.Println(err) } defer jsonFile.Close() byteValue, _ := ioutil.ReadAll(jsonFile) fmt.Println(string(byteValue)) type Data struct { ID int Question string Description string Answers struct { A string B string C string D string E string F string } MultipleCorrectAnswers string CorrectAnswers struct { A string B string C string D string E string F string } CorrectAnswer string Explanation string Tip string Tags []struct { Name string } Category string Difficulty string } var QuizList2 []Data if err := json.Unmarshal(byteValue, &QuizList2); err != nil { fmt.Println(err.Error()) } fmt.Println(QuizList2)
登錄后復制
但得到的響應是[{393 mysql的“父親”是______。 { } { } [{mysql}] sql medium}]我已經嘗試了一切方法來解決它,但沒有達到響應
解決方法
json 字段 answer_a
不會單獨映射到 go 字段 a
。
更改 go 字段的名稱以匹配 json 字段的名稱(忽略大小寫):
answer_a string
登錄后復制
或者在您的字段中使用 go struct 標記:
A string `json:"answer_a"`
登錄后復制
對與相應 json 字段不匹配的其余 go 字段執行相同的操作。