2016-03-31 38 views
1

我有以下代碼,它的工作原理。我正在檢查JSON對象是否具有完整字段,並且不包含基礎字段(如果您有興趣,可以使用Jira API)。有沒有更簡潔的寫for循環的方法?從Python中的JSON響應檢查空對象

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" 

回答

3

您可以使用dict.get與後備詞典:

>>> 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') 

或定義像下面後備詞典:

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

下面的代碼工作完美。我假設這兩種方法是一個偏好問題? '在myVals中發佈: 受讓人=(問題['fields'] ['assignee']或{}).get('displayName','Unassigned')' –

+0

@MarkD,是的,選擇一個更容易爲你讀。 – falsetru