我的目标是递归地解析来自dynamo.getItem
方法的DynamoDB
请求。
不幸的是,我在用于Node.js的DynamoDB SDK中找不到类似的方法。
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html
我正在寻找一种从结果中删除类型的有效方法。在DynamoDB中,键是由一个字母组成的属性名称,如"N“、"S”、"M“。
这些类型的描述:
N means DynamoDB Number type
S means dynamoDB String type
M means DynamoDB Map type (object with properties)
当前的JSON结构是:
{
"id":{
"N":"4"
},
"number":{
"N":"1"
},
"data":{
"M":{
"aaa":{
"S":"AAA"
},
"lv2":{
"M":{
"lv3":{
"M":{
"ccc":{
"N":"111"
}
}
},
"bbb":{
"S":"BBB"
}
}
}
}
}
}
我需要一个JavaScript函数来将上面的JSON映射到一个更短的版本中:
{
"id": "4",
"number": "1",
"data": {
"aaa": "AAA",
"lv2": {
"lv3": {
"ccc": "111"
},
"bbb": "BBB"
}
}
}
这通常是一个JavaScript问题,但我想有DynamoDB经验的人可能知道如何处理这个问题。
有什么想法吗?
发布于 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.marshall
和Converter.Unmarshall
。请参阅:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html
发布于 2021-03-04 05:38:05
如果您使用的是@aws-sdk/client-dynamodb (npm),那么可以将它与@aws-sdk/util-dynamodb中的unmarshall
方法配对。
例如:
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 :)
})();
发布于 2018-08-08 14:19:36
其他选项是创建自定义地图:
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
}
}
}
}
);
https://stackoverflow.com/questions/27966910
复制相似问题