如何格式化来自DynamoDB扫描()API(Python)的响应



我正在进行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

最新更新