web-dev-qa-db-fra.com

Accéder aux éléments JSON

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.

63
doniyor
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'))
87
Yarkee

Voici une solution alternative utilisant requêtes :

import requests
wjdata = requests.get('url').json()
print wjdata['data']['current_condition'][0]['temp_C']
23
alecxe

'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'
6
snat2100