// 一個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
}