从“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 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

从PRISM开始学WPFMVVMViewModel?

在 python 中,为啥从数组读取比从列表读取慢?

从图库中挑选或从相机捕获的高质量图像

从PRISM开始学WPFMVVMCommand?

从PRISM开始学WPFPrism?

mysql 主-主-从-从