Golang解析json的幾種方法
概要
使用Golang調用其它平台API接口時總會被多層的json串給惡心到,我記錄一下自己解析json的幾種方法。
一、自帶的json包
func JsonUnmarshal(b []byte) {
var s Student
if err := json.Unmarshal(b, &s); err != nil {
log.Println(err)
}
}
二、強制類型裝換和反射
func GetItemMap(parent map[string]interface{}, key string) map[string]interface{} {
val, ok := parent[key].(map[string]interface{})
if ok {
return val
} else {
return nil
}
}
func GetItemString(parent map[string]interface{}, key string) string {
val, ok := parent[key].(string)
if ok {
return val
}
return ""
}
我只展示了部分函數,大概的想法都差不多,只需將原有的[]byte轉為map[string]interface{}類型,然后使用這些函數即可。
使用mapstructure
func MapStruct(b []byte) {
var s Student
var tmp map[string]interface{}
json.Unmarshal(b, &tmp)
err := mapstructure.Decode(tmp, &s)
if err != nil {
fmt.Println(err)
}
}
總結
最常用是二、三兩種方式結合使用,將json串中所需要的那一解析出來,然后使用mapsruct來操作
