96 votes

Accès aux éléments JSON

Je récupère les informations météorologiques à partir d'une URL.

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

et ce que j'obtiens 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 à l'élément que je veux ?

si je le fais : print wjson['data']['current_condition']['temp_C'] Je reçois une erreur disant :

Les indices des chaînes de caractères doivent être des entiers, pas des str.

146voto

Yarkee Points 1378
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 devez la convertir en un dict par json.loads et ensuite vous pouvez l'analyser avec l'index.

Au lieu d'utiliser .read() pour l'enregistrer en mémoire de façon intermédiaire et le lire ensuite à l'adresse suivante json , permettre json pour le charger directement depuis le fichier :

wjdata = json.load(urllib2.urlopen('url'))

34voto

alecxe Points 50783

Voici une solution alternative utilisant demande :

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

8voto

snat2100 Points 87

'temp_C' est une clé dans un dictionnaire qui est dans une liste qui est dans un dictionnaire

Cette méthode fonctionne :

wjson['data']['current_condition'][0]['temp_C']
>> '10'

2voto

Vous pouvez aussi le faire de cette façon :

MYJSON = {
    'username': 'gula_gut',
    'pics': '/0/myfavourite.jpeg',
    'id': '1'
}

#changing username
MYJSON['username'] = 'calixto'
print(MYJSON['username'])

1voto

Alok Tiwari Points 198

Une autre alternative consiste à utiliser la méthode get avec les requêtes :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X