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!
dictinresponselook right to you?print(response)is saying such things asdatetime.datetimeand using single quotes (illegal in JSON), it definitely converted it for you already.#data = json.loads(response)and add this line instead:print(response['InstanceHealthList'][0]['Deployment']['VersionLabel']). Does this give you the desired result?