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来操作