2016-03-28 9 views
1

Новый для Python, и я не уверен, что он правильно кодирует мой запрос как JSON. Я пытаюсь получить доступ к определенным элементам в JSON. Это то, что у меня есть:Доступ к вложенным элементам JSON в Python

import requests 
import json 

url = "sample.com" 
access_token "xxxxx" 

headers = { 
    'authorization': access_token, 
    'cache-control': "no-cache" 
    } 

response = requests.request("GET", url, headers=headers) 

jsonvar = response.json() 
print(jsonvar) 

Это дает мне:

{u'sleep': 
    [{u'logId': 11208762595, 
     u'dateOfSleep': u'2016-03-23', 
     u'isMainSleep': True, 
     u'startTime': u'2016-03-22T23:43:30.000', 
     u'restlessCount': 7, 
     u'duration': 12540000, 
     u'restlessDuration': 13, 
     u'minuteData': [{u'value': u'2', u'dateTime': u'23:43:30'}, 
         {u'value': u'1', u'dateTime': u'23:44:30'}],       
     u'awakeCount': 1, 
     u'minutesAfterWakeup': 0}], 
u'summary': 
     {u'totalTimeInBed': 418, 
     u'totalMinutesAsleep': 395, 
     u'totalSleepRecords': 2}} 

Я изменил выход в попытке сделать его более удобным для чтения. В любом случае я хотел бы задать конкретные значения элементов для таких переменных, как isMainSleep и т.д.

я пытался что-то вроде этого:

myvar = jsonvar['isMainSleep'] 

Я был в состоянии получить эту работу в другой ситуации, но ни один из данные были вложенными, что, по-видимому, является разницей здесь.

+1

'jsonvar [ 'сон'] [ 'isMainSleep']' ' –

+1

isMainSleep' находится в словаре вложен в список, вложенный в другой словарь. Вы хотите 'jsonvar [u'sleep] [0] [u'isMainSleep ']'. Обратите внимание на 'u' спереди, потому что это строки unicode и' [0] ', потому что это первый элемент в списке. Возможно, вы захотите добавить некоторую проверку ошибок. – solarc

+0

@solarc ваше предложение сработало! Однако, поскольку его просто комментарий я не могу принять его в качестве ответа. Есть ли лучший способ вывода этих данных, чтобы он действительно был в формате JSON? –

ответ

4

Вам просто нужно получить доступ к каждому словарю по пути. Как это:

myvar = jsonvar['sleep'][0]['isMainSleep'] 

Вы получите список, связанный с ключом sleep, то первый элемент, который является словарем. Наконец, значение, связанное с ключом isMainSleep.

Обратите внимание, что вам не нужно добавлять префикс 'u' перед вашими ключами.

В ответ на ваш комментарий, вы могли бы выход это как JSON, как это:

print json.dumps(myvar) 
+0

Отличное спасибо! –

1

У вас есть вложенный список и словарь здесь, а клавиши верхнего уровня: sleep и summary. Попробуйте myvar = jsonvar['sleep'][0]['isMainSleep'].

Смежные вопросы