首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >解析DynamoDB请求

解析DynamoDB请求
EN

Stack Overflow用户
提问于 2015-01-15 23:28:17
回答 3查看 4.4K关注 0票数 2

我的目标是递归地解析来自dynamo.getItem方法的DynamoDB请求。

不幸的是,我在用于Node.js的DynamoDB SDK中找不到类似的方法。

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html

我正在寻找一种从结果中删除类型的有效方法。在DynamoDB中,键是由一个字母组成的属性名称,如"N“、"S”、"M“。

这些类型的描述:

代码语言:javascript
复制
N means DynamoDB Number type
S means dynamoDB String type
M means DynamoDB Map type (object with properties)

当前的JSON结构是:

代码语言:javascript
复制
{  
  "id":{  
    "N":"4"
  },
  "number":{  
    "N":"1"
  },
  "data":{  
    "M":{  
      "aaa":{  
        "S":"AAA"
      },
      "lv2":{  
        "M":{  
          "lv3":{  
            "M":{  
              "ccc":{  
                "N":"111"
              }
            }
          },
          "bbb":{  
            "S":"BBB"
          }
        }
      }
    }
  }
}

我需要一个JavaScript函数来将上面的JSON映射到一个更短的版本中:

代码语言:javascript
复制
{  
    "id": "4",
    "number": "1",
    "data": { 
        "aaa": "AAA",
        "lv2": {    
            "lv3": { 
                "ccc": "111"
            },
            "bbb": "BBB"
        }
    }
}

这通常是一个JavaScript问题,但我想有DynamoDB经验的人可能知道如何处理这个问题。

有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2019-01-04 06:43:41

aws-sdk现在提供了对AWS.DynamoDB.Converter的封送/解组数据的支持。请参阅此处的文档:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/Converter.html

2018年1月7日更新:此转换器代码内置于AWS.DynamoDB.DocumentClient中,因此无需直接使用Converter.marshallConverter.Unmarshall。请参阅:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html

票数 3
EN

Stack Overflow用户

发布于 2021-03-04 05:38:05

如果您使用的是@aws-sdk/client-dynamodb (npm),那么可以将它与@aws-sdk/util-dynamodb中的unmarshall方法配对。

例如:

代码语言:javascript
复制
const { DynamoDBClient, GetItemCommand } = require("@aws-sdk/client-dynamodb");
const { marshall, unmarshall } = require("@aws-sdk/util-dynamodb");

(async () => {
  const client = new DynamoDBClient({ region: "eu-west-2" });
  const params = {
    Key: marshall({
      HashKey: "KeyName",
    }),
    TableName: "my-table",
  };
  const command = new GetItemCommand(params);
  const { Item } = await client.send(command);
  const POJO = unmarshall(Item); // POJO is without types :)
})();
票数 2
EN

Stack Overflow用户

发布于 2018-08-08 14:19:36

其他选项是创建自定义地图:

代码语言:javascript
复制
const items = data.Items.map(
    (item) => {
        return {
            id: item.id.N,
            number: item.number.N,
            data: {
               aaa: item.data.M.aaa.S,
               lv2: {
                   lv3: {
                       ccc: item.data.M.lv2.M.lv3.M.ccc.N
                   },
                   bbb: item.data.M.lv2.M.bbb.S
               }
            }
        }
    }
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27966910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档