python - 当元素不存在时处理 JSON Parsing TypeError 的正确方法

标签 python json parsing dataframe

代码最终得到了我想要的东西。 (这是从一个非常大的json数据集中创建我想要的字段的字典列表,以便我可以创建一个用于额外数据处理的数据框)

但是我必须构建一个非常大的 try/expect block 才能完成此任务。我想知道是否有更清晰/更聪明的方法来做到这一点。

我遇到的问题是详细信息['element']有时不存在或没有值,如果子元素上不存在,则会抛出 NoneType 异常[ 'Value'] 无法获取,因为它不存在。

因此,如果发生这种情况,我有一个非常大的 try/except block 来将变量设置为 ''

我尝试将详细信息['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

最佳答案

您可以使用get 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 ''

    ...

关于python - 当元素不存在时处理 JSON Parsing TypeError 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42876705/

相关文章:

python 2.7 : How to get the list of static variables in a class?

python - 使用字典将列添加到数据框

c# 将字符串(不带时区)解析为 DateTime,同时考虑 DST

Java解析器,动态声明的n维数组数组

Python:嵌套字典 - 如果键不存在则创建,否则求和 1

python - 我如何将 matplotlib 与 igraph 一起使用?

c# - 如何在自定义 System.Text.Json JsonConverter 中使用默认序列化?

javascript - 为什么这个 for in 语句返回 0 和 1?

jquery - REST 上传到 SharePoint 2013 在线文档库后获取项目 ID

Python 摩尔斯电码 : S. O.S