Change
'body': json.loads(json_data)
to
'body': json.dumps(json_data)
API Gateway 需要一个字符串作为输出,json.dumps
正是这样做的。json.loads
另一方面,从字符串创建 JSON。如果您了解 NodeJS,它们分别相当于 JSON.stringify 和 JSON.parse。
Example
json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
产生
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
while
json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
produces
[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
此信息可在官方文档 https://docs.python.org/2/library/json.html
EDIT
OP和我都错过的另一件事是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
}