我正在进行API网关练习,我一直在格式化来自DynamoDB的响应。以下是我得到的回复:
{项目:[{日期:十进制('3022020(,结果:十进制('32'(,团队:罗马,联盟:系列A,结果:3-1},日期:十进制,"联赛":"系列A","结果":"3-1"},{"日期":十进制("3022020"(,"ResultID":十进制('30'(,"Team":"Roma","League":"SerieA","Result":"3-1"}],"Count":4,"ScanneCount":11,"ResponseMetadata":{"RequestId":"MP2RQ0V4QT898T10DVMMJVMMVRVV4KQNSO5AEMVJF66Q9ASUAAJG","HTTPStatusCode":200,"HTTPHeaders":{EMVJF66Q9ASUAAJG','x-amz-crc32':'972061714'},"重试次数":0}}
对我来说,它看起来像一个嵌套的数组,但每当我尝试处理响应对象时,它都会引发内部服务器错误。从本质上讲,lambda扫描数据库中的两个属性(联赛和球队(,并将结果作为响应以强制字符串的形式返回给浏览器。下面是我处理未格式化字符串对象的要点。
dbresponse = table.scan(FilterExpression=....)
responseObject = {
'statusCode': 200
'body': str(dbresponse)
}
return responseObject
我想要一些'body':str(dbresponse)
格式的东西——来自DynamoDB的响应,但我真的不知道该怎么做
谢谢!
编辑
所以,我似乎还没有像我想象的那样真正理解"辅助方法"的概念(见下面的答案(。
我在lambda_handler默认方法中添加了helper方法的非工作版本。我收到了一些NameErrors,我认为我传入的对象错误,或者调用了数组中的属性或其他错误。
def json_response(respDB):
for response in respDB['Items']:
response = response + { Date: respDB.Date,
League: respDB.League, Team: respDB.Team,
Score: respDB.Score }
return response
此外,正如建议的那样,我使用这个方法,并按照建议将数据库响应变量作为'body': json_response(respDB)
传入。
谢谢你的帮助!
您需要自己用JSON构建响应体。尝试创建一个助手方法,该方法接收DynamoDB的输出并输出格式化的JSON。
helper方法应该看起来像这样:
def json_response(respDB):
response = []
for item in respDB['Items']:
response.append( { 'Date': item['Date'], 'League': item['League'], 'Team': item['Team']})
return response
并使用它来构建正确格式化的响应体
dbresponse = table.scan(FilterExpression=....)
responseObject = {
'statusCode': 200
'body': format_response(dbresponse)
}
return responseObject