Accediendo a elementos JSON

Estoy obteniendo la información del tiempo de una URL.

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

y lo que estoy consiguiendo es:

 { "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" }] } } 

¿Cómo puedo acceder a cualquier elemento que quiera?

si lo hago: print wjson['data']['current_condition']['temp_C'] Me print wjson['data']['current_condition']['temp_C'] un error que dice:

Los índices de cadena deben ser enteros, no str.

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

Lo que obtienes de la url es una cadena json. Y no puedes analizarlo directamente con el índice. Deberías convertirlo a un dict por json.loads y luego puedes analizarlo con el índice.

En lugar de usar .read() para guardarlo en la memoria y luego leerlo en json , permita que json cargue directamente desde el archivo:

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

Aquí hay una solución alternativa utilizando solicitudes :

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

‘temp_C’ es una clave dentro del diccionario que está dentro de una lista que está dentro de un diccionario

De esta manera funciona:

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