Как я могу получить идентификатор места из ответа - PullRequest
0 голосов
/ 16 мая 2019

Поскольку я только начал работать с Python, у меня возникли некоторые трудности с доступом к ключам.
Я хочу пройтись по каждому месту в Foursquare, которое я получил в качестве ответа JSON, чтобы получить идентификатор места.Затем необходимо добавить идентификатор объекта в качестве параметра, чтобы получить все сведения о местах проведения.

Я уже пробовал использовать цикл for, но он не работал:

for a in data['response']['groups']['items']['venue']:
my_place_id = place['id']

venue_ID_resp = requests.get(url=url_venue_details,params=my_place_id)

Сообщение об ошибке:

for a in data['response']['groups']['items']['venue']:
TypeError: list indices must be integers or slices, not str

Ответ выглядит следующим образом:

'response':{  
   'groups':[  
      {  
         'items':[  
            {  
               'reasons':{  
                  'count':0,
                  'items':[  
                     {  
                        'reasonName':'globalInteractionReason',
                        'summary':'This '                        'spot '                        'is '                        'popular',
                        'type':'general'
                     }
                  ]
               },
               'referralId':'e-0-52bf5eca498e01893b7004fb-0',
               'venue':{  
                  'categories':[  
                     {  
                        'icon':{  
                           'prefix':'https://ss3.4sqi.net/img/categories_v2/travel/hostel_',
                           'suffix':'.png'
                        },
                        'id':'4bf58dd8d48988d1ee931735',
                        'name':'Hostel',
                        'pluralName':'Hostels',
                        'primary':True,
                        'shortName':'Hostel'
                     }
                  ],
                  'id':'52bf5eca498e01893b7004fb',
                  'location':{  

Я хочу получить только идентификатор места, например:

print(my_place_id)

4bf58dd8d48988d1ee931234
4bf58dd8d48988d1ee945225
4bf58dd8d48988d1ee931888
4bf58dd8d48988d1ee564563
.
.
.

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Ваш Json содержит списки. Вы можете получить идентификатор:

my_id = data['response']['groups']['items'][0]['venue']['categories'][0]['id']

Примечание. Если в ваших списках больше элементов, вы можете создать цикл for и получить все идентификаторы.

0 голосов
/ 16 мая 2019

items внутри group в вашем ответе JSON - это список. По этой причине вы получаете сообщение об ошибке: «TypeError: list indices must be integers or slices, not str», поскольку индекс списка не может быть строкой.

Как правильно указал @tfw, даже группы - это список, поэтому он должен быть

Вам необходимо получить к нему доступ как data['response']['groups'][0]['items'][0]['venue']

Если в списке элементов будет несколько элементов, то лучше прокрутить их и получить доступ, как показано ниже

for x in data['response']['groups']:
    for y in x['items']
        print y['venue']
...