我正在尝试解析以下来自aws ec2 describe-instances cli命令输出的json:
"Reservations": [
{
"Instances": [
{
"Monitoring": {
"State": "disabled"
},
"PublicDnsName": "ec2xxxxxxxxxx.us-west-2.compute.amazonaws.com",
"StateReason": {
"Message": "Client.UserInitiatedShutdown: User initiated shutdown",
"Code": "Client.UserInitiatedShutdown"
},
"State": {
"Code": 80,
"Name": "stopped"
},
"EbsOptimized": false,
"LaunchTime": "2016-11-28T20:17:05.000Z",
"PublicIpAddress": "x.x.110.2",
"PrivateIpAddress": "x.x.2.2",
我能够解析“ LaunchTime”,但是使用相同的代码,我无法解析“ PublicIpAddress”或“ PrivateIpAddress。从逻辑上讲,这没有任何意义。
这是我的代码:
#!/usr/bin/python3
import json
with open('all-instances.json') as f:
data = json.load(f)
for myInstance in data['Reservations']:
print(myInstance['Instances'][0]['LaunchTime']) #This works
print(myInstance['Instances'][0]['PublicIpAddress']) #This doesn't work
这是我得到的输出:
Traceback (most recent call last):
File "./json-parsing.py", line 15, in <module>
print(myInstance['Instances'][0]['PublicIpAddress'])
KeyError: 'PublicIpAddress'
所以我的问题是;为什么即使它们在同一个python词典中并且我使用的是完全相同的代码,我如何也可以获取LaunchTime的值而不是PublicIpAddress? 感谢您的协助。 埃里克
编辑:
这将说明没有公共IP的实例,并且将继续而不会引发错误。
if 'PublicIpAddress' in myInstance['Instances'][0]:
print(myInstance['Instances'][0]['PublicIpAddress'])
else:
print("None")
答案 0 :(得分:0)
我认为这是因为实例之一没有PublicIpAddress
。那是发生这种情况的唯一可能性
答案 1 :(得分:0)
我已经尝试过使用您的确切代码,并且可以正常工作,我想这是json文件本身的问题,也许不是所有实例都具有公共地址