在解析JSON时使用Python

在解析JSON时使用Python,python,json,Python,Json,有时(不经常)下面的JSON会有额外的字段 在EventName和EventSources之间调用Username 例如: "EventName": "AssumeRole", "EventSource": "sts.amazonaws.com", "Username": "someuser" 有时情况并非如此(如下所示) 我想创建if-else,所以如果有“Username”:“someuser”,则打印一个输出,如果没有,则打印另一个输出 with open('1.json') as fi

有时(不经常)下面的JSON会有额外的字段 在
EventName
EventSources
之间调用
Username

例如:

"EventName": "AssumeRole",
"EventSource": "sts.amazonaws.com",
"Username": "someuser"
有时情况并非如此(如下所示)

我想创建if-else,所以如果有“Username”:“someuser”,则打印一个输出,如果没有,则打印另一个输出

with open('1.json') as file:
 data = json.load(file)

with open('cloudtrail.csv', 'wt') as file:
 #file.write('ResourceType,ResourceName,EventName,UserName\n')
 for element in data['Events']:
  if element['Username']:
   for resource in element['Resources']:
    print(resource['ResourceType'] + ',' + resource['ResourceName'] + ',' + element['EventName'] + ',' + element['Username'])
  else:
    print(resource['ResourceType'] + ',' + resource['ResourceName'] + ',' + element['EventName'])
但是面对这一点(因为
元素['Username']
不存在):


使用
try except
语句

try:
    username = element['Username']
except KeyError:
    # Deal with it
    username = None

# note that the try statement does not create a new scope
if username is not None:
    print(username)
您可以轻松地将此结构重新用于其他键


为了完整起见,我应该注意,您还可以将
else
finally
try except
一起使用。
else
语句仅在未执行
except
时执行。无论发生什么情况,
finally
都将运行。

使用
try except
语句

try:
    username = element['Username']
except KeyError:
    # Deal with it
    username = None

# note that the try statement does not create a new scope
if username is not None:
    print(username)
您可以轻松地将此结构重新用于其他键

为了完整起见,我应该注意,您还可以将
else
finally
try except
一起使用。
else
语句仅在未执行
except
时执行。无论发生什么情况,
最终将运行。

尝试以下条件:

if 'Username' in element:
尝试以下条件:

if 'Username' in element:

IMHO这是一个更干净的解决方案,但是有些人会建议在python中IMHO这是一个更干净的解决方案,但是有些人会建议在python中是