2016-04-26 11 views
1

イム、私は理解していれば、現在のエラーにのpythonネストされたJSONのararys APIにアクセスする

print objUser['name'] 
TypeError: string indices must be integers 

を取得したサンプル(ここでhttps://developer.pagerduty.com/documentation/rest/escalation_policies/on_call

SUBDOMAIN='XXX' 
API_ACCESS_KEY='XXX' 

headers = { 
    'Authorization': 'Token token={0}'.format(API_ACCESS_KEY), 
    'Content-type': 'application/json', 
} 
url = 'https://{0}.pagerduty.com/api/v1/escalation_policies/on_call'.format(SUBDOMAIN) 
r = requests.get(url,headers=headers) 
objData = r.json() 


for objPolicy in objData['escalation_policies']: 
    print objPolicy['name'] 
    for objOnCall in objPolicy['on_call']: 
     print objOnCall['level'] 
     print objOnCall['start'] 
     print objOnCall['end'] 
     for objUser in objOnCall['user']: 
      print objUser['name'] 

イムは右である、[]リストで、{}オブジェクトですか?だから私はリストとしてオブジェクトにアクセスしようとしているthatsはなぜ動作していないのですか?

初心者のために入れ子の量はかなり分かりません。誰かが説明して、そのon_callポリシーで各ユーザーにアクセスする方法を教えてもらえますか?

おかげで

+1

コードはオブジェクトをうまく取り出すことができました。問題は、objUserが文字列そのものであるように見えることです。 for文の 'print objUser'の後にデバッグ行を追加し、それが何を表示するかを見てみましょう。 –

+0

あなたはリストではなく辞書であるかのように*文字列*にアクセスしようとしています。 – jonrsharpe

答えて

1

API documentationによると、オブジェクト( "辞書" を考える)user下にあります:

... 
"user": { 
    "id": "P9TX7YH", 
    "name": "Cordell Simonis", 
    "email": "[email protected]", 
    "time_zone": "Pacific Time (US & Canada)", 
    "color": "dark-goldenrod" 
} 

はそれを反映するためにコードを変更:

user = objOnCall['user'] # user is a dictionary 
print(user['name']) # getting a value from a dictionary by a key 
+0

完璧!ありがとう – AlexW

関連する問題