Подтвердить что ты не робот

Доступ к элементам 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.

4b9b3361

Ответ 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'