- 此问题在此处已有答案**:
Deep get item from json with default value in python(1个答案)
Return a default value if a dictionary key is not available(15个答案)
2天前关闭。
我从一个在线网站抓取一些JSON数据,并有以下内容:-
try:
data = response.read()
json_response = json.loads(source)
name = json_response['profiles'][0]['content']['nameFull']
first_name = json_response['profiles'][0]['content']['name']['first']
surname = json_response['profiles'][0]['content']['name']['last']
employment_type = json_response['profiles'][0]['content']['employeeType']['title']
except:
continue
对于上面分配的每个变量,我对每个变量执行一个操作。如果**JSON中的所有值都存在,那么这个操作就可以正常工作,但是,例如,如果"title"条目不存在,那么这个操作就失败了。如果不考虑在每个变量上添加"try/except",我该如何处理这个问题?有没有更Python化的处理方法?同样,如果默认值不存在于顶层而不是每个JSON条目级别,是否有办法添加默认值?
谢谢
1条答案
按热度按时间6yjfywim1#
不知道有没有帮助,但我发现:
1.使用get()方法:get()方法允许你指定一个默认值,如果你试图访问的键在JSON中不存在,这个默认值将被返回。这可能是一个比使用多个try-except块更优雅的解决方案,因为你可以在一行代码中为每个键指定默认值。例如:
name = json_response.get('profiles')[0].get('content').get('nameFull', 'N/A')
1.使用dict.setdefault()方法:setdefault()方法允许你为不存在的键设置一个默认值。这个方法只在键不存在的时候才将键值对添加到字典中。例如:
json_response['profiles'][0]['content'].setdefault('employeeType', {}).setdefault('title', 'N/A')
1.使用递归:使用递归遍历JSON数据,在访问之前检查每个键是否存在。如果您需要在JSON中的多个级别上处理丢失的数据,这将非常有用。
4.使用pandas库中的json_normalize将json扁平化,并使用fillna方法为缺少的字段设置默认值。