Json 检查字段是否存在的多个try/except语句的替代方法
我正在从Facebook图形浏览器API获取一些信息。API的输出是一个JSON对象。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
有时输出包含我要查找的字段(即教育、学校名称等),有时不包含。为了弥补这一点,我必须为我要查找的每个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')