2016-04-28 1 views
-1

У меня есть ответ JSON из API следующим образом: -Как получить данные из json-схемы? ошибка показали, TypeError: строковые индексы должны быть целыми

{ 
"meta": { 
"code": 200 
}, 
"data": { 
"username": "luxury_mpan", 
"bio": "Recruitment Agents\nThe most powerful manufacturers,\nwe have the best quality.\nWechat:13255996580\nWhatsapp:+8618820784535", 
"website": "", 
"profile_picture": "https://scontent.cdninstagram.com/t51.2885-19/10895140_395629273936966_528329141_a.jpg", 
"full_name": "Mpan", 

"counts": { 
    "media": 17774, 
    "followed_by": 7982, 
    "follows": 7264 
}, 

"id": "1552277710" 
} 
} 

Я хочу получать данные в «СМИ», «followed_by» и «следует» и хранить его в трех различных списках, как показано в коде ниже: -

for r in range(1,5): 
    var=r,st.cell(row=r,column=3).value 
    xy=var[1] 
    ij=str(xy) 
    myopener=Myopener() 
    url=myopener.open('https://api.instagram.com/v1/users/'+ij+'/?access_token=641567093.1fb234f.a0ffbe574e844e1c818145097050cf33') 
    beta=json.load(url) 
    for item in beta['data']: 
     list1.append(item['media']) 
     list2.append(item['followed_by']) 
     list3.append(item['follows']) 

Когда я бегу, он показывает ошибку TypeError: строковые индексы должны быть целыми Как бы мое изменение цикла для того, чтобы введите вышеупомянутые значения?

Также, спрашивая из любопытства: - Есть ли способ получить Watzapp no ​​из слова «BIO» в словаре данных?

Я задал вопросы, подобные этому, и до сих пор не получил ответа. Пожалуйста помоги!

ответ

2

beta['data'] - объект словаря. Когда вы итерацию над ней с for item in beta['data'] значения, принятые item будут ключи словаря: "username", "bio" и т.д.

Итак, когда вы просите, например, item['media'] это как просить "username"['media'], который конечно, не имеет никакого смысла.

Не совсем понятно, что вы хотите: это всего лишь материал внутри counts? Если да, то вместо for item in beta['data']: вы можете просто сказать item = beta['data']['counts'], а затем item['media'] и т. Д. Будут теми значениями, которые вы хотите.

Что касается вашего вторичного вопроса: предлагаю посмотреть на регулярные выражения.

+1

Благодарим за отзыв. Я хочу, чтобы данные внутри «подсчитывались». Это означает, что число «медиа», количество «последующих» и число «следует». Посмотрев на ответ, я изменил свой цикл как: «для элемента в бета-версии ['data'] ['counts]: list1.append (item [' media '])' Он дает ту же ошибку –

+0

По той же причине. 'beta ['data'] ['counts']' - словарь, и когда вы перебираете его с помощью 'for', вы получаете его ключи, которые являются просто строками. Вещь, которую вы хотите индексировать с помощью «медиа» и т. Д., - это 'beta ['data'] ['counts']' сама. –

+0

Является ли причина, по которой вам нужен цикл, который вы ожидаете некоторой ситуации, в которой этот объект JSON имеет несколько вещей в нем с ключевыми носителями, после \ _by и следует? Если это так, я думаю, вам нужно больше рассказать о том, что это такое. –

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