Ich erhalte die Wetterinformationen von einer URL.
weather = urllib2.urlopen('url')
wjson = weather.read()
und was ich bekomme ist:
{
"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"
}]
}
}
Wie kann ich auf ein beliebiges Element zugreifen?
Wenn ich das tue: print wjson['data']['current_condition']['temp_C']
Ich erhalte die Fehlermeldung:
Zeichenfolgenindizes müssen Ganzzahlen sein, nicht str.
requests
ist eine erstaunliche Möglichkeit, mit JSON auszukommen. Wenn Sie mit komplizierten URLs umgehen, verwenden Sie sie.Antworten:
import json weather = urllib2.urlopen('url') wjson = weather.read() wjdata = json.loads(wjson) print wjdata['data']['current_condition'][0]['temp_C']
Was Sie von der URL erhalten, ist eine JSON-Zeichenfolge. Und Sie können es nicht direkt mit dem Index analysieren. Sie sollten es in ein Diktat von konvertieren
json.loads
und es dann mit dem Index analysieren.Anstelle der Verwendung
.read()
speichert es in dem Speicher zwischen und es dann lesenjson
, damitjson
es aus der Datei direkt laden:wjdata = json.load(urllib2.urlopen('url'))
quelle
json.loads()
. Sie versuchen nur, direkt auf JSON zuzugreifen ... ohne sich in etwas zu verwandeln, das von Python gelesen werden kann, oder ein Modul zu verwenden, um dies zu tun.json.load(urllib2.urlopen('url'))
, es lädt es direkt, anstatt es zwischenzeitlich im Speicher zu speichernHier ist eine alternative Lösung mit Anfragen :
import requests wjdata = requests.get('url').json() print wjdata['data']['current_condition'][0]['temp_C']
quelle
'temp_C' ist ein Schlüssel im Wörterbuch, der sich in einer Liste befindet, die sich in einem Wörterbuch befindet
So funktioniert es:
wjson['data']['current_condition'][0]['temp_C'] >> '10'
quelle
Nur für mehr als eine Option ... Sie können es auch so machen:
MYJSON = { 'username': 'gula_gut', 'pics': '/0/myfavourite.jpeg', 'id': '1' } #changing username MYJSON['username'] = 'calixto' print(MYJSON['username'])
Ich hoffe das kann helfen.
quelle
Eine andere alternative Möglichkeit, die get-Methode mit Anforderungen zu verwenden:
import requests wjdata = requests.get('url').json() print wjdata.get('data').get('current_condition')[0].get('temp_C')
quelle