2017-12-01 16 views
0

辞書のキーと値にアクセスしようとしていますが、TypeErrorを取得しようとしています。TypeError:文字列インデックスは.json()辞書の整数である必要があります

コード私が使用しています下回る..

def function(): 
    EMAILS_FOR_ISSUES = 'https://github.com/api/v3/users/JimmyBuffet' 
    resource = requests.get(EMAILS_FOR_ISSUES, auth=AUTH) 
    if not resource.status_code == 200: 
     raise Exception(resource.status_code) 

    print(type(resource.json())) 
    print(resource.json()) 
    for x in resource.json(): 
     print(x) 
     print(x[0]) 
     print(x[4]) 
     user_email = x['email'] 
     print(user_email) 
return 

私が得る応答.. *注:私は読みやすくするため、ここでdictの出力をフォーマットされています。

<type 'dict'> 
{ 
    u'public_repos': 1, 
    u'site_admin': False, 
    u'gravatar_id': u'', 
    u'hireable': None, 
    u'id': 6048, 
    u'email': u'[email protected]' 
} 
public_repos 
p 
i 
Traceback (most recent call last): 
    File "retrieve_old_issues.py", line 122, in <module> 
    function() 
    File "retrieve_old_issues.py", line 58, in function 
    user_email = x['email'] 
TypeError: string indices must be integers 

目標はメールを取得することです。私は、キーの前のユニコードのキャラクターもいくつかのものを台無しにしていると思っていますが、まだそれについて何かを見つけることができませんでした。なぜこれは機能しないのですか?

答えて

3
for x in resource.json(): 

ここでは、辞書の各エントリをループし、xにキーを割り当てることができます。あなたは「私は」X [0]とX [4]彼らは0番目であるため、とのために印刷されている「P」を参照して、なぜそう例えば、forループの最初の反復で

x = "public_repo" 

です文字列 "public_repo"の4番目の位置です。

代わりにやりたいことは、resource.json()を変数に代入して変数にインデックス付けするだけです。たとえば、

dict = resource.json() 
print(dict["email"]) 
+0

です。あなたは正しいです、ありがとう! –

関連する問題