Je reçois les informations météo à partir d'une URL.
weather = urllib2.urlopen('url')
wjson = weather.read()
et ce que je reçois, c'est:
{
"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"
}]
}
}
Comment puis-je accéder à n'importe quel élément que je veux?
si je fais: print wjson['data']['current_condition']['temp_C']
Je reçois une erreur en disant:
les indices de chaîne doivent être des entiers et non des str.
import json
weather = urllib2.urlopen('url')
wjson = weather.read()
wjdata = json.loads(wjson)
print wjdata['data']['current_condition'][0]['temp_C']
Ce que vous obtenez de l'URL est une chaîne JSON. Et vous ne pouvez pas l’analyser directement avec index. Vous devriez le convertir en dict par json.loads
, Puis vous pourrez l'analyser avec index.
Au lieu d'utiliser .read()
pour l'enregistrer en mémoire, puis le lire dans json
, autorisez json
à le charger directement à partir du fichier:
wjdata = json.load(urllib2.urlopen('url'))
Voici une solution alternative utilisant requêtes :
import requests
wjdata = requests.get('url').json()
print wjdata['data']['current_condition'][0]['temp_C']
'temp_C' est une clé du dictionnaire qui se trouve dans une liste qui se trouve dans un dictionnaire
Cela fonctionne:
wjson['data']['current_condition'][0]['temp_C']
>> '10'