Доступ к элементам JSON
Я получаю информацию о погоде от URL-адреса.
weather = urllib2.urlopen('url')
wjson = weather.read()
и что я получаю:
{
"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"
}]
}
}
Как я могу получить доступ к любому элементу, который я хочу?
если я это сделаю: print wjson['data']['current_condition']['temp_C']
Я получаю сообщение об ошибке:
Строковые индексы должны быть целыми, а не str.
Ответы
Ответ 1
import json
weather = urllib2.urlopen('url')
wjson = weather.read()
wjdata = json.loads(wjson)
print wjdata['data']['current_condition'][0]['temp_C']
То, что вы получаете от URL-адреса, - это строка json. И ваш не может проанализировать его с помощью индекса напрямую.
Вы должны преобразовать его в dict через json.loads
, а затем вы можете проанализировать его с помощью индекса.
Вместо использования .read()
для промежуточного сохранения его в памяти, а затем прочитайте его в json
, разрешите json
загружать его непосредственно из файла:
wjdata = json.load(urllib2.urlopen('url'))
Ответ 2
Здесь альтернативное решение, использующее requests:
import requests
wjdata = requests.get('url').json()
print wjdata['data']['current_condition'][0]['temp_C']
Ответ 3
'temp_C' - ключевой внутренний словарь, который находится внутри списка, который находится внутри словаря
Этот способ работает:
wjson['data']['current_condition'][0]['temp_C']
>> '10'