// 一个PHP中的多层关联数组,即Go中的多层map,如何从json字符串中解析,然后取到map中的某个具体的值。

// 数据结构如下:

cityInfo := "{

"status": 0,

"result": {

"location": {

"lat": 39.88,

"lng": 118.69

},

"address": "河北省唐山市迁安市京哈高速公路",

"address_component": {

"nation": "中国",

"province": "河北省",

"city": "唐山市",

"district": "迁安市",

"street": "京哈高速公路",

"street_number": "京哈高速公路"

},

}

}"

// 我们这里取 cityInfo["result"]["address_component"]["district"] 这个值,即: 迁安市

// 我们使用的数据为json后的map, 内容与上面展示的完全相同,所以需要先从json解析到map
cityInfo := "{\"status\": 0,\"result\": {\"location\": {\"lat\": 39.88,\"lng\": 118.69},\"address\": \"河北省唐山市迁安市京哈高速公路\",\"address_component\": {\"nation\": \"中国\",\"province\": \"河北省\",\"city\": \"唐山市\",\"district\": \"迁安市\",\"street\": \"京哈高速公路\",\"street_number\": \"京哈高速公路\"}}}"
fmt.Println(cityInfo)
cityInfoMap := util.JSONToMap(cityInfo)
fmt.Println(cityInfoMap)
cityName, ok := cityInfoMap["result"].(map[string]interface{})["address_component"].(map[string]interface{})["district"]
fmt.Println(cityName) // 这里会输出迁安市, 取到对应的值,OK

// 上述代码中util.JSONToMap()方法的代码如下, 随便放到一个package中,然后引用即可,此处我放入到util包中。


// json转Map ()
func JSONToMap(str string) map[string]interface{} { var tempMap = make(map[string]interface{}) err := json.Unmarshal([]byte(str), &tempMap) if err != nil {
panic(err)
} return tempMap
}
04-24 19:53