Python

2016-03-31 5 views
1

'daki JSON yanıtından boş nesne denetleniyor Aşağıdaki kod var ve çalışıyor. Bir JSON nesnesinin tam bir alanı olup olmadığını ve temel alanları içermediğini kontrol ediyorum (ilgileniyorsanız Jira API'sı). For döngüsü yazmanın daha kısa bir yolu var mı?Python

myResponse = requests.get(url,auth=(urlUser,urlPass)) 

jd = myResponse.json() 
myVals = jd['issues'] 

print(myVals[0].keys()) 
for issue in myVals: 
    if issue['fields']['assignee'] is not None: 
     assignee = issue['fields']['assignee']['displayName'] 
    else: 
     assignee = "Unassigned" 

cevap

3

Sen geri dönüş sözlükle dict.get kullanabilirsiniz:

>>> issues = {'fields': {'assignee': None}} 
>>> issues['fields']['assignee'] or {} # fallback to an empty dictionary 
{} 
>>> (issues['fields']['assignee'] or {}).get('displayName', 'Unassigned') 
'Unassigned' 

for issue in myVals: 
    assignee = (issue['fields']['assignee'] or {}).get('displayName', 'Unassigned') 

VEYA aşağıda gibi yedek sözlüğünü tanımlayın: Aşağıdaki kod mükemmel çalıştı

UNASSIGNED = {'displayName': 'Unassigned'} 
for issue in myVals: 
    assignee = (issue['fields']['assignee'] or UNASSIGNED)['displayName'] 
+0

. İki yöntemin tercih meselesi olduğunu mu varsayıyorum? 'MYVals'taki sorunlardan dolayı: assignee = (['fields'] ['assignee'] veya {}) sorunu ('displayName', 'Atanmadı')' –

+0

@MarkD, Evet, hangisini seçin sizin için daha kolay okunabilir. – falsetru