我的目标是递归地解析来自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
发布于 2015-09-03 08:36:55
如果你正在使用node,有一个很酷的包,它完成了发电机到json的编组和解组,对我来说效果很好:
https://www.npmjs.com/package/dynamodb-marshaler
对象的基本封送处理
var AWS = require('aws-sdk');
var marshalItem = require('dynamodb-marshaler').marshalItem;
AWS.config.region = 'us-west-2';
var dynamoDb = new AWS.DynamoDB();
dynamoDb.putItem({
TableName: 'users',
Item: marshalItem({username: 'nackjicholson'}) // {username: {S: 'nackjicholson'}}
});对象的Basic解组
var AWS = require('aws-sdk');
var unmarshalItem = require('dynamodb-marshaler').unmarshalItem;
AWS.config.region = 'us-west-2';
var dynamoDb = new AWS.DynamoDB();
var data = dynamoDb.scan({
TableName: 'users'
}, function(err, data) {
// data.Items = [{username: {S: 'nackjicholson'}]
var items = data.Items.map(unmarshalItem);
console.log(items); // [{username: 'nackjicholson'}]
});发布于 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 :)
})();https://stackoverflow.com/questions/27966910
复制相似问题