在 Typescript 和 AWS Lambda 中将 DynamoDB 数据格式化为正常 JSON

Formatting DynamoDB data to normal JSON in Typescript and AWS Lambda

我正在使用查询从 DynamoDB 检索数据,我得到以下返回:

[{"serviceUserId":{"S":"123456789"},"createdDate":{"S":"11-12-2021"}}]

DynamoDB JSON 格式具有我试图通过转换为正常 JSON 格式来摆脱的类型。我尝试使用 AWS.DynamoDB.Converter.unmarshall 但我的代码出现错误:

Argument of type 'ItemList' is not assignable to parameter of type "AttributeMap".
  Index signature for type 'string' is missing in type "AttributeMap[]".

这是我的代码:

                 if (result.Count > 0) {
                     const newImage = AWS.DynamoDB.Converter.unmarshall(
                        result.Items
                         )
                   console.log('new Image: ' + JSON.stringify(newImage));
                    resolve(newImage);
                 } else { 
                     console.log('No record found');
                     reject(err);
                 }

如果我删除 DynamoDB JSON 中的 [] 括号,那么它会成功转换,但显然我不能在我的程序中这样做,因为括号存在是有原因的!

有谁知道如何将我的 JSON 文件转换为 unmarshall 可以接受的格式?

映射项目并一一解组。 (un)marshal accepts an object type,不是数组。

import { marshall, unmarshall } from '@aws-sdk/util-dynamodb';  // SDK V3, but worked the same in V2

(() => {
  const items = [{ serviceUserId: { S: '123456789' }, createdDate: { S: '11-12-2021' } }];
  
  // from DynamoDB JSON
  const unmarshalled = items.map((i) => unmarshall(i));

  // make the return trip back to DynamoDB JSON
  const marshalled = unmarshalled.map((i) => marshall(i));
})();