2016-10-14 4 views
0

У меня есть ответ от Четвероугольного, который гласитПеребор объекта JSON в Python

response: { 
    suggestedFilters: {}, 
    geocode: {}, 
    headerLocation: "Harlem", 
    headerFullLocation: "Harlem", 
    headerLocationGranularity: "city", 
    query: "coffee", 
    totalResults: 56, 
    suggestedBounds: {}, 
    groups: [{ 
       type: "Recommended Places", 
       name: "recommended", 
       items: [{ 
          reasons: { 
           count: 1, 
           items: [{ 
            summary: "You've been here 6 times", 
            type: "social", 
            reasonName: "friendAndSelfCheckinReason", 
            count: 0 
           }] 
          }, 
          venue: { 
           id: "4fdf5edce4b08aca4a462878", 
           name: "The Chipped Cup", 
           contact: {}, 
           location: {}, 
           categories: [], 
           verified: true, 
           stats: {}, 
           url: "http://www.chippedcupcoffee.com", 
           price: {}, 
           hasMenu: true, 
           rating: 8.9, 
           ratingColor: "73CF42", 
           ratingSignals: 274, 
           menu: {}, 
           allowMenuUrlEdit: true, 
           beenHere: {}, 
           hours: {}, 
           photos: {}, 
           venuePage: {}, 
           storeId: "", 
           hereNow: {} 
          }, 
          tips: [], 
          referralId: "e-0-4fdf5edce4b08aca4a462878-0" 
         }, 

] 

Если я печатаю следующее:

for value in json_data['response']['groups'][0]: 
print(value['name']) 

я получаю TypeError: строковые индексы должны быть целыми

Мне просто интересно, как пройти через этот ответ, чтобы получить названия предприятий.

Thanks

+0

Возможный дубликат [Итерация через объект JSON] (http://stackoverflow.com/questions/2733813/iterating-through-a-json-object) – MooingRawr

+1

It явно не выглядит как действительный JSON – sisanared

+0

Вам не хватает ']' и '}' – jmugz3

ответ

1

Вы зашли слишком далеко. [0] является первым элементом группы

for value in json_data['response']['groups'] 

Или вам нужно на самом деле анализировать данные в формате JSON из строки с json.loads функции

Кроме того, я думаю, что вы хотите

value['venue']['name'] 
+0

Я использую библиотеку запросов, которая имеет встроенную функцию json, которая анализирует ответ, который я думаю? Также, когда я делаю так, как вы предлагали, я получаю новую ошибку: UnicodeEncodeError: кодек ascii не может кодировать символ '\ xe9' в позиции 11003: порядковый номер не в диапазоне (128) –

+0

Эта ошибка, кажется, указывает на проблему кодирования, не проблема с моим ответом. Если вы обновите свой вопрос с помощью [mcve] кода запросов, я рассмотрю его –

+0

@RonArevalo, что также может показаться, что ошибка в использовании Python 2 (но в скобках «print», как в Python 3); возможно, время для перехода на Python 3. –

0

json_data['response']['groups'][0] - словарь. Когда вы перебираете словарь, вы выполняете итерацию по списку ключей, все из которых являются строками ... поэтому в цикле value является строкой.

Итак, когда вы запрашиваете value['name'], вы пытаетесь проиндексировать строку с помощью ['name'], что не имеет никакого смысла, отсюда и ошибка.

Я думаю, что вы имели в виду:

for value in json_date['response']['groups'] 
Смежные вопросы