【问题标题】:Problem parsing json from "aws ec2 describe-instances" output从“aws ec2 describe-instances”输出解析 json 时出现问题
【发布时间】: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")

【问题讨论】:

    标签: python json amazon-web-services parsing amazon-ec2


    【解决方案1】:

    我认为这是因为其中一个实例没有PublicIpAddress。这是发生这种情况的唯一可能性

    【讨论】:

    • 你确定在同一个python dict中有吗?
    • 我不这么认为,因为我复制了字典并在我的python解释器中进行了测试,它能够检索到PublicIpAddress
    • 谢谢,这就是问题所在。我知道这很简单。
    【解决方案2】:

    我已经尝试过使用您的确切代码并且它可以正常工作我猜这是 json 文件本身的问题可能并非所有实例都有公共地址

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2022-06-24
      • 2018-11-15
      • 2019-06-14
      相关资源
      最近更新 更多