1

Python (2.7)でOpen weather maps APIからJSONデータから必要なデータを抽出しようとしています! JSONファイルはこんな感じ。

{u'calctime': 0.0331,
 u'cnt': 2,
 u'cod': u'200',
 u'list': [{u'clouds': {u'all': 75},
            u'coord': {u'lat': 45.551109, u'lon': 18.69389},
            u'distance': 0.001,
            u'dt': 1351870200,
            u'id': 3193935,
            u'main': {u'humidity': 93,
                      u'pressure': 1008,
                      u'temp': 287.15,
                      u'temp_max': 291.18,
                      u'temp_min': 287.15},
            u'name': u'Osijek',
            u'weather': [{u'description': u'broken clouds',
                          u'icon': u'04d',
                          u'id': 803,
                          u'main': u'Clouds'}],
            u'wind': {u'deg': 70, u'speed': 4.6}},
           {u'clouds': {u'all': 75},
            u'coord': {u'lat': 45.568611, u'lon': 18.61389},
            u'distance': 6.526,
            u'dt': 1351870200,
            u'id': 3187657,
            u'main': {u'humidity': 93,
                      u'pressure': 1008,
                      u'temp': 285.43,
                      u'temp_max': 287.15,
                      u'temp_min': 282.15},
            u'name': u'Visnjevac',
            u'weather': [{u'description': u'light intensity shower rain',
                          u'icon': u'09d',
                          u'id': 520,
                          u'main': u'Rain'}],
            u'wind': {u'deg': 70, u'speed': 4.6}}],
 u'message': u'Model=GFS-OWM, '}

これは、2 つの地理的ポイントの気象データです。json パッケージを使用して両方のポイント (湿度や温度など) から単一のデータを抽出する方法は知っていますが、異なる地理的なポイントから同じタイプの複数のデータを抽出できないという問題があります。この例では、それらのポイント (osijek、visnjevac) の名前を抽出/出力します。

jsonエンコーダー/デコーダーでそれを行う方法はありますか?

4

3 に答える 3

3

あなたが持っているのはJSONではなく、Pythonオブジェクトなので、元のJSON文字列json.loads()または同様のものをすでに渡していると思います。

都市のリスト内の各ディクショナリの値を抽出するに'name'は、次を使用できます。

names = [city['name'] for city in data['list']]

結果:

>>> names
[u'Osijek', u'Visnjevac']

は、変数に投稿のコンテンツがあることを前提としていますdata

于 2012-11-02T17:18:26.743 に答える
1

FJの回答に追加したいのですが、特定の都市のデータを動的に抽出したい場合は、次のようにすることができます。

cities = ['osijek', 'visnjevac']
cities_data = filter(lambda i: i['name'].lower() in cities, data['list'])
于 2012-11-02T17:28:23.253 に答える
0

私の GitHub Python プロジェクトPyOWMが役に立つかもしれません。これは、Open Weather Map Web API のシンプルなオブジェクト指向クライアント ラッパーです。

于 2013-12-13T10:31:00.260 に答える