Изменение
'body': json.loads(json_data)
до
'body': json.dumps(json_data)
API-шлюз ожидает строку в качестве вывода, а json.dumps
делает именно это. json.loads
, с другой стороны, создает JSON из строки. Если вы знаете NodeJS, они эквивалентны JSON.stringify и JSON.parse, соответственно.
Пример
json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
производит
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
, а
json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
1025 * производит *
[u'foo ', {u'bar': [u'baz ', None, 1.0, 2]}]
Эта информация доступна в официальных документах
EDIT
Еще одна вещь, которую я и пропустил, это то, что data['Body'].read()
возвращает не сам JSON, а буфер. Сначала его нужно декодировать.
json_data = data['Body'].read().decode('utf-8')
уже вернет строковый JSON (конечно, только потому, что ваш файл является JSON), поэтому в своем выражении return вы можете просто сделать это следующим образом:
return {
'statusCode': 200,
"headers": {"Content-Type": "application/json"},
'body': json_data
}