Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当元素不存在时处理JSON解析TypeError的正确方法_Python_Json_Parsing_Dataframe - Fatal编程技术网

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

Python 当元素不存在时处理JSON解析TypeError的正确方法,python,json,parsing,dataframe,Python,Json,Parsing,Dataframe,密码让我最终得到我想要的。(这是为了从一个非常大的json数据集中创建一个我想要的字段字典列表,这样我就可以为额外的数据处理创建一个dataframe) 但是,我必须构造一个非常大的try/expect块来完成这项工作。我想知道是否有更清晰/聪明的方法来实现这一点 我遇到的问题是,细节['element']有时不存在或没有值,如果子元素['value']上不存在,则会引发非类型异常,因为它不存在,因此无法捕获 因此,如果发生这种情况,我有一个很大的try/except块将变量设置为' 我试图将详

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

但是,我必须构造一个非常大的try/expect块来完成这项工作。我想知道是否有更清晰/聪明的方法来实现这一点

我遇到的问题是,细节['element']有时不存在或没有值,如果子元素['value']上不存在,则会引发非类型异常,因为它不存在,因此无法捕获

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

我试图将详细信息['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
您可以使用它来提供默认值以简化此代码:

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 ''

    ...