Amazon web services 为什么我会得到;datetime.datetime“;使用lambda时出错?
我目前正在使用AWS Lambda编写此脚本:Amazon web services 为什么我会得到;datetime.datetime“;使用lambda时出错?,amazon-web-services,amazon-s3,aws-lambda,Amazon Web Services,Amazon S3,Aws Lambda,我目前正在使用AWS Lambda编写此脚本: import boto3 import json s3 = boto3.client("s3") def lambda_handler(event, context): bucket = "www.onlinecodecompiler.com" key = "aws_cli_bucket.txt" try: data = s3.get_
import boto3
import json
s3 = boto3.client("s3")
def lambda_handler(event, context):
bucket = "www.onlinecodecompiler.com"
key = "aws_cli_bucket.txt"
try:
data = s3.get_object(Bucket=bucket, Key=key)
json_data = data["Body"].read()
return{
"response_code ": 200,
"data": data
}
except Exception as e:
print(e)
raise(e)
txt文件“aws_cli_bucket.txt”中有以下语句,“列出bucket中的所有对象aws s3 ls s3://bucket name”。这只是一个随机的文本,因为我只是在测试lambda是否可以从我的S3存储桶中读取文本文件,但为什么我会收到一个错误声明
datetime.datetime(2021, 3, 22, 19, 50, 48, tzinfo=tzutc()) is not JSON serializable
我在网上搜索,大多数人都会遇到这个错误,因为他们的代码与日期和时间有关,而我的代码与日期和时间无关
任何帮助都将不胜感激。此错误源于您从
s3.get\u对象中得到的响应,该对象包含3个datetime
对象
{
'Body': StreamingBody(),
'DeleteMarker': True|False,
'AcceptRanges': 'string',
'Expiration': 'string',
'Restore': 'string',
'LastModified': datetime(2015, 1, 1),
...
'Expires': datetime(2015, 1, 1),
...
'ObjectLockRetainUntilDate': datetime(2015, 1, 1),
}
在返回之前,您还必须删除Body
键,该键包含StreamingBody()
,否则也会出错
"errorMessage": "Unable to marshal response: <botocore.response.StreamingBody object at 0x7fa2370625d0> is not JSON serializable",
上面的代码生成以下响应
{
“响应代码”:200,
“数据”:{
“ResponseMetadata”:{
“请求ID”:“980JCEDBG0AWZH”,
“主机ID”:“Oscwxx/5str0NFoWbnP/f5SAS4euhiJPQUXx7uOs205fowd7ICNtU=”,
“HTTPStatusCode”:200,
“HTTPHeaders”:{
“x-amz-id-2”:“Oscwxx/5Xk3uv7LuFUDx7uOs205fowd7ICNtU=”,
“x-amz-request-id”:“980JC0KEDBWZH”,
“日期”:“2021年3月22日星期一20:43:56 GMT”,
“上次修改”:“2021年3月20日星期六17:35:25 GMT”,
“etag”:“d41d8cd98f00b20498ecf8427e\”,
“接受范围”:“字节”,
“内容类型”:“文本/x-python”,
“内容长度”:“0”,
“服务器”:“AmazonS3”
},
“重试尝试”:1
},
“AcceptRanges”:“字节”,
“ContentLength”:0,
“ETag”:“d41d8cd98f00b00998ecf8427e\”,
“ContentType”:“text/x-python”,
“元数据”:{}
}
}
错误源于您从包含3个datetime
对象的s3.get\u对象得到的响应
{
'Body': StreamingBody(),
'DeleteMarker': True|False,
'AcceptRanges': 'string',
'Expiration': 'string',
'Restore': 'string',
'LastModified': datetime(2015, 1, 1),
...
'Expires': datetime(2015, 1, 1),
...
'ObjectLockRetainUntilDate': datetime(2015, 1, 1),
}
在返回之前,您还必须删除Body
键,该键包含StreamingBody()
,否则也会出错
"errorMessage": "Unable to marshal response: <botocore.response.StreamingBody object at 0x7fa2370625d0> is not JSON serializable",
上面的代码生成以下响应
{
“响应代码”:200,
“数据”:{
“ResponseMetadata”:{
“请求ID”:“980JCEDBG0AWZH”,
“主机ID”:“Oscwxx/5str0NFoWbnP/f5SAS4euhiJPQUXx7uOs205fowd7ICNtU=”,
“HTTPStatusCode”:200,
“HTTPHeaders”:{
“x-amz-id-2”:“Oscwxx/5Xk3uv7LuFUDx7uOs205fowd7ICNtU=”,
“x-amz-request-id”:“980JC0KEDBWZH”,
“日期”:“2021年3月22日星期一20:43:56 GMT”,
“上次修改”:“2021年3月20日星期六17:35:25 GMT”,
“etag”:“d41d8cd98f00b20498ecf8427e\”,
“接受范围”:“字节”,
“内容类型”:“文本/x-python”,
“内容长度”:“0”,
“服务器”:“AmazonS3”
},
“重试尝试”:1
},
“AcceptRanges”:“字节”,
“ContentLength”:0,
“ETag”:“d41d8cd98f00b00998ecf8427e\”,
“ContentType”:“text/x-python”,
“元数据”:{}
}
}