Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python | How to parse JSON from results from AWS response?

I was trying to get the value of VersionLabel which is php-v1 but my code doesn't work properly and I don't know what I'm doing wrong.

Could you please let me know what's wrong and how can I parse the php-v1?

This is my error message.

TypeError: the JSON object must be str, not 'dict'

This is my code.

#!/usr/bin/env python3

import boto3
import json

def get_label():
   try:
      env_name = 'my-env'
      eb = boto3.client('elasticbeanstalk')
      response = eb.describe_instances_health(
         EnvironmentName=env_name,
         AttributeNames=[
            'Deployment'
         ]
      )
      #print(response)
      data = json.loads(response)
      print(data['VersionLabel'])
   except:
      raise

if __name__ == '__main__':
   get_label()

This is the response I got from AWS when print(response) is invoked.

{
   'InstanceHealthList':[  
      {  
         'InstanceId':'i-12345678',
         'Deployment':{  
            'DeploymentId':2,
            'DeploymentTime':datetime.datetime(2016,
            9,
            29,
            4,
            29,
            26,
            tzinfo=tzutc()),
            'Status':'Deployed',
            'VersionLabel':'php-v1'
         }
      }
   ],
   'ResponseMetadata':{  
      'HTTPStatusCode':200,
      'RequestId':'12345678-1234-1234-1234-123456789012',
      'RetryAttempts':0,
      'HTTPHeaders':{  
         'content-length':'665',
         'content-type':'text/xml',
         'date':'Sat, 01 Oct 2016 11:04:56 GMT',
         'x-amzn-requestid':'12345678-1234-1234-1234-123456789012'
      }
   }
}

Thanks so much!

like image 971
devxvda1 Avatar asked Oct 01 '16 15:10

devxvda1


People also ask

How do you Analyse JSON data in Python?

Instead of the JSON loads method, which reads JSON strings, the method used to read JSON data in files is load(). The load() method takes up a file object and returns the JSON data parsed into a Python object. To get the file object from a file path, Python's open() function can be used.


1 Answers

As per the boto3 docs [http://boto3.readthedocs.io/en/latest/reference/services/elasticbeanstalk.html?highlight=describe_instances_health#ElasticBeanstalk.Client.describe_instances_health], the describe_instances_health method returns dict and not json. Hence, there is no need for you to do the conversion. To get VersionLabel from data, use -

data ['InstanceHealthList'][0]['Deployment']['VersionLabel']

Edit : Note that the above fetches the VersionLabel for the first instance, out of possible multiple instances. In case you have multiple instances and they happen to have different values of VersionLabel, then you would require additional logic to get the one you need.

like image 52
AnishT Avatar answered Oct 27 '22 01:10

AnishT