使用带 EMR 的 AWS Lambda 从字符串中获取 JSON 对象
get a JSON object from a string using AWS Lambda with EMR
因此,在 AWS EMR CLI 中,运行 以下命令输出一个 JSON 像这样(值现在无效,所以不用担心泄露敏感信息):
现在,在我的 Lambda python 代码中,我想提取“状态”值。这是我在 python:
中的代码
import json
import requests
def lambda_handler(event, context):
jobid = event.get('jobID')
url = '<public DNS of my EMR>/batches/' + str(jobid)
res = requests.get(url)
json_data = json.loads(res.text)
return json_data.get('state')
我收到这样的错误:
{
"errorMessage": "'str' object has no attribute 'get'",
"errorType": "AttributeError",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 9, in lambda_handler\n return json_data.get('state')\n"
]
}
我做错了什么,我该如何纠正?
由于您使用的是 requests 模块,因此您可以使用 json()
方法作为 here 到 return 数据的解释JSON 类结构 (dict)。
所以,你可以这样做:
import requests
import json
def lambda_handler(event, context):
jobid = event.get('jobID')
url = '<public DNS of my EMR>/batches/' + str(jobid)
res = requests.get(url)
js_res = res.json()
return js_res['state']
因此,在 AWS EMR CLI 中,运行 以下命令输出一个 JSON 像这样(值现在无效,所以不用担心泄露敏感信息):
现在,在我的 Lambda python 代码中,我想提取“状态”值。这是我在 python:
中的代码import json
import requests
def lambda_handler(event, context):
jobid = event.get('jobID')
url = '<public DNS of my EMR>/batches/' + str(jobid)
res = requests.get(url)
json_data = json.loads(res.text)
return json_data.get('state')
我收到这样的错误:
{
"errorMessage": "'str' object has no attribute 'get'",
"errorType": "AttributeError",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 9, in lambda_handler\n return json_data.get('state')\n"
]
}
我做错了什么,我该如何纠正?
由于您使用的是 requests 模块,因此您可以使用 json()
方法作为 here 到 return 数据的解释JSON 类结构 (dict)。
所以,你可以这样做:
import requests
import json
def lambda_handler(event, context):
jobid = event.get('jobID')
url = '<public DNS of my EMR>/batches/' + str(jobid)
res = requests.get(url)
js_res = res.json()
return js_res['state']