当元素不存在时处理JSON解析TypeError的正确方法

2024-04-20 04:53:09 发布

您现在位置:Python中文网/ 问答频道 /正文

密码让我最终得到我想要的(从一个非常大的json数据集中创建一个字段字典列表,这样我就可以创建一个dataframe来进行额外的数据处理)

但是,我必须构造一个非常大的try/expect块来完成这个任务。我想知道是否有一个更清晰/聪明的方法来做这件事

我遇到的问题是,细节['element']有时不存在或没有值,如果子元素['value']上不存在,就会抛出一个NoneType异常,因为它不存在,所以无法获取

所以我有一个很大的try/except块来设置变量为'

我试图将details['element']发送给一个函数,该函数将向变量输出一个返回值……但看起来我做不到,因为Python在将元素传递给函数之前会检查该元素是否为NoneType,而这是在将其发送给函数之前发生的

有什么想法吗

rawJson = json.loads(data.decode('utf-8'))
issues = rawJson['issues']
print('Parsing data...')
for ticket in issues:
    details = ticket['fields']

    try:
        key = ticket['key']
    except TypeError:
        key = ''
    try:
        issueType = details['issuetype']['name']
    except TypeError:
        issueType = ''
    try:
        description = details['description']
    except TypeError:
        description = ''
    try:
        status = details['status']['name']
    except TypeError:
        status = ''
    try:
        creator = details['creator']['displayName']
    except TypeError:
        creator =''
    try:
        assignee = details['assignee']['displayName']
    except TypeError:
        assignee =''
    try:
        lob = details['customfield_10060']['value']
    except TypeError:
        lob ='' 

 .... There is a long list of this

Tags: key函数json元素statusdescriptionelementdetails
1条回答
网友
1楼 · 发布于 2024-04-20 04:53:09

您可以使用^{} method,它允许提供一个默认值来简化此代码:

d = {'a': 1, 'c': 2}
value = d.get('a', 0) // value = 1 here because d['a'] exists
value = d.get('b', 0) // value = 0 here because d['b'] does not exist

所以你可以写:

for ticket in issues:
    details = ticket['fields']

    key = ticket.get('key', '')
    description = details.get('description', '')
    issueType = details['issuetype'].get('name') if 'issuetype' in details else ''

    ...

相关问题 更多 >