最近在使用Go語言解析復雜的JSON數據時,遇到了一些困難。經過查閱資料,總結了以下方法:
1.使用struct對應JSON格式的數據結構
type Person struct { Name string `json:"name"` Age int `json:"age"` Phone struct { Mobile string `json:"mobile"` Home string `json:"home"` } `json:"phone"` } func main() { jsonStr := ` { "name": "張三", "age": 18, "phone": { "mobile": "13612345678", "home": "010-12345678" } } ` var p Person json.Unmarshal([]byte(jsonStr), &p) fmt.Printf("%#v\n", p) }
此方法適用于JSON數據結構比較簡單的情況,但是對于復雜的JSON數據,使用此方法會加重代碼量。
2.使用map對應JSON格式的數據結構
func main() { jsonStr := ` { "name": "張三", "age": 18, "phone": { "mobile": "13612345678", "home": "010-12345678" } } ` var data map[string]interface{} if err := json.Unmarshal([]byte(jsonStr), &data); err != nil { panic(err) } fmt.Printf("%#v\n", data) }
此方法不用事先定義結構體,可以對應任意復雜的JSON數據結構,但使用此方法需要頻繁的類型斷言,代碼可讀性較差。
3.使用jsoniter解析JSON數據
type Person struct { Name string `json:"name"` Age int `json:"age"` Phone struct { Mobile string `json:"mobile"` Home string `json:"home"` } `json:"phone"` } func main() { jsonStr := ` { "name": "張三", "age": 18, "phone": { "mobile": "13612345678", "home": "010-12345678" } } ` var p Person jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal([]byte(jsonStr), &p) fmt.Printf("%#v\n", p) }
jsoniter是一個Go語言解析json的庫,功能與encoding/json類似,但速度更快,常用于解析大型或高并發的JSON數據。
最后,根據實際情況選擇不同的方法解析JSON數據,簡化代碼實現并提高性能。
下一篇c json和類轉換