Python | Comment parser du JSON à partir des résultats de AWS réponse?
J'ai essayé d'obtenir la valeur de VersionLabel
qui est php-v1
mais mon code ne fonctionne pas correctement et je ne sais pas ce que je fais mal.
Pourriez-vous s'il vous plaît laissez-moi savoir quel est le problème et comment puis-je analyser le php-v1
?
C'est mon message d'erreur.
TypeError: the JSON object must be str, not 'dict'
C'est mon 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()
C'est la réponse que j'ai obtenu à partir d'AWS quand print(response)
est invoquée.
{
'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'
}
}
}
Merci beaucoup!
Je ne suis pas un boto3 utilisateur, mais il semble que le décodage json qui a déjà été fait pour vous. Le
Si votre
Essayez de commenter
Merci pour le contrôle! Donc, ce qui signifie que je dois arrêter d'utiliser json module? Comment puis-je obtenir la valeur de la VersionLabel?
suggestion devrait le faire.
dict
dans response
regarder à droite pour vous?Si votre
print(response)
est dire des choses telles que datetime.datetime
et d'utiliser des guillemets simples (illégal en JSON), il est converti pour vous déjà.Essayez de commenter
#data = json.loads(response)
et ajoutez cette ligne à la place: print(response['InstanceHealthList'][0]['Deployment']['VersionLabel'])
. Est-ce à vous donner le résultat souhaité?Merci pour le contrôle! Donc, ce qui signifie que je dois arrêter d'utiliser json module? Comment puis-je obtenir la valeur de la VersionLabel?
suggestion devrait le faire.
OriginalL'auteur sedawkgrep | 2016-10-01
Vous devez vous connecter pour publier un commentaire.
Que par la boto3 docs [http://boto3.readthedocs.io/en/latest/reference/services/elasticbeanstalk.html?highlight=describe_instances_health#ElasticBeanstalk.Client.describe_instances_health%5D, le describe_instances_health méthode renvoie dict et pas de json. Par conséquent, il n'est pas nécessaire pour vous de faire la conversion.
Pour obtenir VersionLabel de données, utilisez
Edit : Notez que le ci-dessus extrait de la VersionLabel pour la première instance, de possible plusieurs instances. Dans le cas où vous avez plusieurs instances, et qu'elles ont des valeurs différentes de VersionLabel, alors vous avez besoin de la logique supplémentaire pour obtenir un.
OriginalL'auteur Anish Tambe