在Go中,可以使用以下幾種方式來解析JSON數據:
encoding/json
包:encoding/json
包提供了Unmarshal()
函數,可以將JSON數據解析為Go結構體對象。使用該函數時,首先需要定義一個結構體類型,該結構體的字段名和類型需要與JSON數據中的字段名和類型保持一致。然后,使用Unmarshal()
函數將JSON數據解析為該結構體對象。type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
jsonStr := `{"name":"Alice","age":25}`
var person Person
err := json.Unmarshal([]byte(jsonStr), &person)
if err != nil {
panic(err)
}
fmt.Printf("Name: %s, Age: %d\n", person.Name, person.Age)
json.Unmarshal()
函數:json.Unmarshal()
函數可以將JSON數據解析為一個map[string]interface{}
類型的對象,其中map
的鍵是字段名,interface{}
表示任意類型的值。使用該函數需要先將JSON數據轉換為[]byte
類型,然后調用json.Unmarshal()
函數進行解析。jsonStr := `{"name":"Alice","age":25}`
var data map[string]interface{}
err := json.Unmarshal([]byte(jsonStr), &data)
if err != nil {
panic(err)
}
fmt.Printf("Name: %s, Age: %f\n", data["name"].(string), data["age"].(float64))
json.Decoder
:json.Decoder
提供了Decode()
方法,可以逐個解析JSON數據中的值,并將其存儲到相應的變量中。使用json.Decoder
可以逐步處理JSON數據,適用于大型JSON數據或流式數據的解析。type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
jsonStr := `{"name":"Alice","age":25}`
var person Person
dec := json.NewDecoder(strings.NewReader(jsonStr))
for {
if err := dec.Decode(&person); err == io.EOF {
break
} else if err != nil {
panic(err)
}
fmt.Printf("Name: %s, Age: %d\n", person.Name, person.Age)
}
無論使用哪種方式,都需要在解析JSON數據時處理錯誤,以確保解析過程正確無誤。