在API网关中将DynamoDB数据格式化为普通JSON

时间:2018-07-17 08:39:43

标签: json amazon-dynamodb

就像问题asked here

我使用AWS API Gateway上的dynamoDB代理服务在dynamoDB上执行查询或扫描操作,以读取客户端数据,并得到DynamoDB格式的JSON数据作为回复。

尽管我可以使用“方法响应”进行转换,但是当数据超过1000条记录时,由于方法响应中foreach循环的限制,我无法处理它。

在dynamodb或api网关中的某处是否存在标志或设置,以便获得正常的json而不是dynamoDB格式的JSON?

DynamoDB格式的JSON示例

{
  "videos": [
    {
      "file": {
        "S": "file1.mp4"
      },
      "id": {
        "S": "1"
      },
      "canvas": {
        "S": "This is Canvas1"
      }
    },
    {
      "file": {
        "S": "main.mp4"
      },
      "id": {
        "S": "0"
      },
      "canvas": {
        "S": "this is a canvas"
      }
    }
  ]
}

相同的普通Json示例

{
  "videos": [
    {
      "file": "file1.mp4",
      "id": "1",
      "canvas": "This is Canvas1"
    },
    {
      "file": main.mp4",
      "id": "0",
      "canvas": "this is a canvas"
    }
  ]
}

2 个答案:

答案 0 :(得分:0)

对此的可能解决方案是使用aws lambda查询/扫描dynamoDb,并在使用某些json库(例如GSON或jackson)将其转换为json后,将域对象回复给他人。

如果有人知道其他选择,请在此处发布。谢谢

答案 1 :(得分:0)

使用Integration Response映射器!

映射器可能类似于:(我使用的是您提供的回复)

#set($inputRoot = $input.path('$'))
{
  "videos": [
#foreach($elem in $inputRoot.Items)
  { "file": "$elem.file.S",
    "id": "$elem.id.S",
    "canvas": "$elem.canvas.S" }#if($foreach.hasNext), #end
#end 
  ] 
}

请参阅链接的文档,以获取有关将AWS Services直接附加到API Gateway的更多完整指南。