以下は、私が解析しようとしているJSONファイルです(好奇心が強い人はOpenWeatherMap APIです)。組み込みのencoding/json
はそれのかなり良い仕事をします。 json.Unmarshal(testJson, &parsed)
を使用すると、ほとんどのJSONファイルが正しく解析されます。しかし、それがフォーマットされている方法では、 "天気"は私に頭痛を与えています。Goで配列を使用した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
}
コード:= // JSON以前の記事 Varの
のvar testJSONは、最初の配列として天候タイプアサーションを実行する必要が
json.Unmarshal(testJSON, &parsed)
parsedMap := parsed.(map[string]interface{})
mainTemp := parsedMap["weather"]
fmt.Println(mainTemp)
私は実際問題が何かを理解していません。なぜあなたは助けを求めたのですか? – NatNgs
これは期待される振る舞いです:もしそれが異なっていたら、 'json.Unmarshal'はあなたのJSONで使っているような長さのスライスを扱うことができません。 – fuglede
@NatNgs基本的には、「角括弧を削除する」というヘルプが必要です。配列(インデックス0を参照)として参照しようとしたときに動作しませんでした –