91

URLから天気情報を取得しています。

weather = urllib2.urlopen('url')
wjson = weather.read()

そして私が得ているのは:

{
  "data": {
     "current_condition": [{
        "cloudcover": "0",
        "humidity": "54",
        "observation_time": "08:49 AM",
        "precipMM": "0.0",
        "pressure": "1025",
        "temp_C": "10",
        "temp_F": "50",
        "visibility": "10",
        "weatherCode": "113",
        "weatherDesc": [{
            "value": "Sunny"
        }],
        "weatherIconUrl": [{
            "value": "http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png"
        }],
        "winddir16Point": "E",
        "winddirDegree": "100",
        "windspeedKmph": "22",
        "windspeedMiles": "14"
    }]        
 }
}

必要な要素にアクセスするにはどうすればよいですか?

もしそうなら:print wjson['data']['current_condition']['temp_C']私は次のようなエラーが出ています:

文字列のインデックスは、str ではなく整数でなければなりません。

4

8 に答える 8

137
import json
weather = urllib2.urlopen('url')
wjson = weather.read()
wjdata = json.loads(wjson)
print wjdata['data']['current_condition'][0]['temp_C']

URL から得られるのは json 文字列です。そして、インデックスで直接解析することはできません。それをdict byに変換する必要がjson.loadsあります。そうすれば、indexで解析できます。

.read()を使用して一時的にメモリに保存してから に読み込む代わりに、ファイルから直接ロードjsonできるようにします。json

wjdata = json.load(urllib2.urlopen('url'))
于 2013-04-21T09:20:50.170 に答える
1

Jsonの詳細なナビゲーションのためにこのメソッドを実行しました

def filter_dict(data: dict, extract):
    try:
        if isinstance(extract, list):
            while extract:
                if result := filter_dict(data, extract.pop(0)):
                    return result
        shallow_data = data.copy()
        for key in extract.split('.'):
            if str(key).isnumeric():
                key = int(key)
            shallow_data = shallow_data[key]
        return shallow_data
    except (IndexError, KeyError, AttributeError):
        return None

filter_dict(wjdata, 'data.current_condition.0.temp_C')
# 10

Using the multiple fields:
filter_dict(wjdata, ['data.current_condition.0.temp_C', 'data.current_condition.1.temp_C']) This working as a OR when take the first element found

# 10

于 2021-02-19T10:33:13.880 に答える
1

リクエストで get メソッドを使用する別の方法:

import requests
wjdata = requests.get('url').json()
print wjdata.get('data').get('current_condition')[0].get('temp_C')
于 2019-12-27T08:19:25.830 に答える