从“aws ec2 describe-instances”输出解析 json 时出现问题
Posted
技术标签:
【中文标题】从“aws ec2 describe-instances”输出解析 json 时出现问题【英文标题】:Problem parsing json from "aws ec2 describe-instances" output 【发布时间】:2020-04-17 16:58:23 【问题描述】:我正在尝试解析从 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")
【问题讨论】:
【参考方案1】:我认为这是因为其中一个实例没有PublicIpAddress
。这是发生这种情况的唯一可能性
【讨论】:
你确定在同一个python dict中有吗? 我不这么认为,因为我复制了字典并在我的python解释器中进行了测试,它能够检索到PublicIpAddress
谢谢,这就是问题所在。我知道这很简单。【参考方案2】:
我已经尝试过使用您的确切代码并且它可以正常工作我猜这是 json 文件本身的问题可能并非所有实例都有公共地址
【讨论】:
以上是关于从“aws ec2 describe-instances”输出解析 json 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章