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 字段執行相同的操作。






