Json 检查字段是否存在的多个try/except语句的替代方法

Json 检查字段是否存在的多个try/except语句的替代方法,json,api,python-2.7,Json,Api,Python 2.7,我正在从Facebook图形浏览器API获取一些信息。API的输出是一个JSON对象。 有时输出包含我要查找的字段(即教育、学校名称等),有时不包含。为了弥补这一点,我必须为我要查找的每个json字段编写一个try/except/else块: # gender try: gender=json_dict['gender'] if gender=='male': gender= unicode('M') elif gender=='female

我正在从Facebook图形浏览器API获取一些信息。API的输出是一个JSON对象。
有时输出包含我要查找的字段(即教育、学校名称等),有时不包含。为了弥补这一点,我必须为我要查找的每个json字段编写一个
try/except/else
块:

 # gender
 try:
     gender=json_dict['gender']

     if gender=='male':
         gender= unicode('M')
     elif gender=='female':
         gender=unicode('F')
 except:
     pass

 #birthday    
 try:
     birthday=json_dict['birthday']

     if len(birthday)==10:
         birthday=int(birthday[6:])
     else:
         birthday=unicode('NULL')
 except:
     pass

 #hometown id
 try:
     hometown_id=int(json_dict['hometown']['id'])
 except:
     pass
不断地。这种方法是有效的,但似乎有点。。。笨拙地?它适用于我的目的,因为我只寻找六个左右的字段。是否有更好/更聪明的方法来扩展此过程?

使用
dict.get(key)
dict.get(key,defaultValue)

会转化为

gender=json_dict.get('gender')
if gender=='male':
        gender= unicode('M')
elif gender=='female':
        gender=unicode('F')
else:
     gender = None # is the default case. no need to write that.

或者,您可以在中使用
进行测试:

if 'gender' in json_dict:
    gender=json_dict['gender']

    if gender=='male':
        gender= unicode('M')
    elif gender=='female':
        gender=unicode('F')
else: pass# gender is not defined, NameError possible

首先,不应在未指定要捕获的内容的情况下使用
除外。这可能会导致一些调试问题

在您的情况下,您可以使用:

如果字典中有
key
,则返回
key
的值,否则返回
default
。如果未给出
default
,则默认为
None
,因此此方法不会引发错误

因此,我们得到如下结果:

genders = {'male': unicode('M'), 'female': unicode('F')}
# if gender isn't found or isn't equal to 'male' or 'female', we return 'NULL'
gender = genders.get(json_dict.get('gender'), unicode('NULL'))

birthday = json_dict.get('birthday')
if len(birthday) == 10:
    birthday = int(birthday[6:])
else:
    birthday = unicode('NULL')
等等

if 'gender' in json_dict:
    gender=json_dict['gender']

    if gender=='male':
        gender= unicode('M')
    elif gender=='female':
        gender=unicode('F')
else: pass# gender is not defined, NameError possible
genders = {'male': unicode('M'), 'female': unicode('F')}
# if gender isn't found or isn't equal to 'male' or 'female', we return 'NULL'
gender = genders.get(json_dict.get('gender'), unicode('NULL'))

birthday = json_dict.get('birthday')
if len(birthday) == 10:
    birthday = int(birthday[6:])
else:
    birthday = unicode('NULL')