【发布时间】:2021-08-19 21:41:18
【问题描述】:
我试图获取VersionLabel 的值,即php-v1,但我的代码无法正常工作,我不知道自己做错了什么。
能否请您告诉我出了什么问题以及如何解析php-v1?
这是我的错误信息。
TypeError: the JSON object must be str, not 'dict'
这是我的代码。
#!/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()
这是我在调用 print(response) 时从 AWS 得到的响应。
{
'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'
}
}
}
非常感谢!
【问题讨论】:
-
我不是 boto3 用户,但似乎已经为您完成了 json 解码。你觉得
response中的dict对吗? -
如果您的
print(response)是在说datetime.datetime之类的内容并使用单引号(在JSON 中是非法的),那么它肯定已经为您转换了。 -
尝试注释掉
#data = json.loads(response)并添加这一行:print(response['InstanceHealthList'][0]['Deployment']['VersionLabel'])。这会给你想要的结果吗? -
@tdelaney 感谢您的检查!那么意味着我必须停止使用 json 模块吗?如何获取 VersionLabel 的值?
-
@BB 的建议应该这样做。
标签: python json amazon-web-services boto