在Python中解析返回的JSON并检查值是否存在[duplicate]

2lpgd968  于 2023-01-27  发布在  Python
关注(0)|答案(1)|浏览(395)
    • 此问题在此处已有答案**:

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条目级别,是否有办法添加默认值?
谢谢

6yjfywim

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中的多个级别上处理丢失的数据,这将非常有用。

def get_json_value(json_data, keys, default=None):
    if keys and json_data:
        key = keys.pop(0)
        if key in json_data:
            return get_json_value(json_data[key], keys, default)
    return json_data or default

name = get_json_value(json_response, ['profiles', 0, 'content', 'nameFull'], 'N/A')

4.使用pandas库中的json_normalize将json扁平化,并使用fillna方法为缺少的字段设置默认值。

import pandas as pd

json_df = pd.json_normalize(json_response)
json_df.fillna('N/A', inplace=True)

相关问题