以下是我正在尝试解析的JSON文件(OpenWeatherMap API,如果有人好奇的话)。内置encoding/json
做得非常好。当我使用json.Unmarshal(testJson, &parsed)
时,大多数JSON文件都被正确解析。然而,随着它的格式化,“天气”让我头疼。
我使用encoding/json
解析了parsedMap := parsed.(map[string]interface{})
生成的文件,当我尝试使用键“main”引用键值对时,该文件有效。
使用fmt.Println()
,值为map[temp:280.32 pressure:1012 humidity:81 temp_min:279.15 temp_max:281.15]
,我可以使用它。
然而,关键的“天气”,我得到了[map[icon:09d id:300 main:Drizzle description:light intensity drizzle]]
。额外的方括号似乎引起了问题。
{
"coord": {
"lon": -0.13,
"lat": 51.51
},
"weather": [
{
"id": 300,
"main": "Drizzle",
"description": "light intensity drizzle",
"icon": "09d"
}
],
"base": "stations",
"main": {
"temp": 280.32,
"pressure": 1012,
"humidity": 81,
"temp_min": 279.15,
"temp_max": 281.15
},
"visibility": 10000,
"wind": {
"speed": 4.1,
"deg": 80
},
"clouds": {
"all": 90
},
"dt": 1485789600,
"sys": {
"type": 1,
"id": 5091,
"message": 0.0103,
"country": "GB",
"sunrise": 1485762037,
"sunset": 1485794875
},
"id": 2643743,
"name": "London",
"cod": 200
}
参考代码:
var testJSON = // POST中的JSON更早 var parsed interface {}
json.Unmarshal(testJSON, &parsed)
parsedMap := parsed.(map[string]interface{})
mainTemp := parsedMap["weather"]
fmt.Println(mainTemp)
答案 0 :(得分:1)
您应首先在天气上执行Type断言作为接口{}的数组。
然后在第一个元素上做同样的map [string] interface {}
temps := parsedMap["weather"].([]interface{})
mainTemp := temps[0].(map[string]interface{})
您可以在此处查看完整示例https://play.golang.org/p/JIfCGrsYl9
答案 1 :(得分:0)