1. dynamodb-marshaler
データを登録したりするときに、いちいち下記のように "S": とか書くのがめんどくさい。
取り出したデータも同様の形になってて使うのがめんどくさい。
Item: {
'id': {"S": "1003"},
'name': {"S": "orange"},
'price': {"N": "210"}
}
なので、DynamoDBの求めるデータ型と、json形式を相互変換してくれるやつを試す。
インストール:
$ npm install dynamodb-marshaler --save
プログラム:
var marshaler = require('dynamodb-marshaler');
data = {
name: "John",
birth: {
"year": 1980,
"month": "January",
"day": 14
}
}
// 元データ表示
console.log(data);
// 変換後
var res = marshaler.marshalItem(data);
console.log(res);
// 元に戻す
var orig = marshaler.unmarshalItem(res);
console.log(orig);
出力:
{ name: 'John',
birth: { year: 1980, month: 'January', day: 14 } }
{ name: { S: 'John' },
birth: { M: { year: [Object], month: [Object], day: [Object] } } }
{ name: 'John',
birth: { year: 1980, month: 'January', day: 14 } }
ちゃんと、変換して元のデータに戻しても同じ状態。
LIST と StringSet の扱いが注意が必要そう。
あと、便利そうなのが、mapで一括でハッシュの配列にするやつ。
プログラム:
var data = dynamodb.scan({
TableName: 'json_test'
}, function(err, data) {
var items = data.Items.map(marshaler.unmarshalItem);
console.log(items);
});
出力:
[ { name: 'delete_item!', id: '1010', price: 222 },
{ name: 'batch-put-item-2!', id: '2002', price: 9991 },
{ name: 'batch-put-item-1!', id: '2001', price: 9990 },
{ name: 'banana', id: '1002', price: 80 },
{ name: 'apple', id: '1001', price: 120 },
{ name: 'orange', id: '1003', price: 30 } ]
これは良さそう。